Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing a parameter through server.execute?

It is possible to pass a parameter through server.execute?

Fx. I have in my site.asp an IF-scenario where I need functions.asp?a=something&id=123 executed. Is this possible?!

On site.asp:

dim id
id = 123

if b = "hi" then
  server.execute("functions.asp?a=something&id=" & id)
else
  response.write("No way dude")
end if

On functions.asp

a = request.querystring("a")
id = request.querystring("id")

if a = "something" and cint(id) > 100 then
  response.write("Yes way dude")
else
  response.write("No way dude")
end if
like image 936
MicBehrens Avatar asked Nov 30 '11 10:11

MicBehrens


2 Answers

You can't use querystring in Server.Execute, it's clearly mentioned in the official documentation.

What you can do is much better: you can directly access the variable id defined in site.asp inside functions.asp, and you can also declare and set another variable, a:

--site.asp:

dim id, a
id = 123
a = "something"
server.execute("functions.asp")

--functions.asp

if a = "something" and cint(id) > 100 then
    response.write("Yes way dude")
else  
    response.write("No way dude")
end if

As it creates whole new "scripting environment" the executed file won't have access to the calling code properties, methods or variables, only to the global Request parameters, Session etc.

With this in mind, I fear the most simple way around is using Session variable to pass the value between pages:

Session("id") = 123
Session("a") = "something"

And then:

if Session("a") = "something" and Session("id") > 100 then
    response.write("Yes way dude")
else  
    response.write("No way dude")
end if
like image 106
Shadow Wizard Hates Omicron Avatar answered Nov 24 '22 23:11

Shadow Wizard Hates Omicron


This question may be old and resolved, but the best answer doesn't mention everything, and there is information clearly posted on Microsoft.com about it:


Server.Execute Method

The following collections and properties are available to the executed ASP page:

  1. Application variables, even if they are set in the calling page.
  2. Session properties, even if they are set in the calling page.
  3. Server variables and properties, even if they are set in the calling page.
  4. Request collections and properties, even if they are set in the calling page. This includes Form and QueryString data passed to the calling page.
  5. Response collections and properties. The executed .asp file may modify HTTP headers. However, as with any .asp file, if the executed .asp file attempts to modify HTTP headers after it sends a response to the client, it generates an error.

So as you can see, there are 5 ways Microsoft suggests to pass variables through to a Server.Execute method. Before I saw this on Microsoft, the preferred method was Session, as the best answer suggests, since I saw this before the info on Microsoft.com. But after noticing that QueryStrings can be passed from the previous page, I would have to say this beats using Session for passing values. Session would be needed if your application required you adding variables to the executing page.

But passing variables, I would say QueryStrings, and it's easy to apply if your application allows the flexibility. I'm sure you know how to already use querystrings, but in the sense of using it for a Server.Execute method, you can simply do this:

Consider having ASP1.asp and ASP2.asp:

ASP1.asp includes:

 Server.Execute("ASP2.asp")

ASP2.asp includes:

 Response.Write Request("id")

When you call ASP1.asp?id=123 You will notice that ASP2.asp also see's the same Querystring passed to ASP1.asp, so it would write 123 on the response of ASP1.asp.

That's much less complicated than using a Session for the task.

like image 30
Control Freak Avatar answered Nov 25 '22 01:11

Control Freak