通过server.execute传递参数?

时间:2011-11-30 10:53:42

标签: asp-classic parameter-passing

可以通过server.execute传递参数吗?

Fx的。我在我的site.asp IF场景中需要执行functions.asp?a=something&id=123。这可能吗?!

在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

在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

4 个答案:

答案 0 :(得分:5)

您无法在Server.Execute中使用查询字符串,official documentation中明确提到了这一点。

你可以做得更好:你可以直接访问id里面site.asp中定义的变量functions.asp,你也可以声明并设置另一个变量{ {1}}

<击>

- site.asp:

a

- functions.asp

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

<击>

当它创建全新的“脚本环境”时,执行的文件将无法访问调用代码属性,方法或变量,只能访问全局请求参数,会话等。

考虑到这一点,我担心最简单的方法是使用Session变量在页面之间传递值:

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

然后:

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

答案 1 :(得分:3)

这个问题可能已经过时并已得到解决,但最佳答案并未提及所有内容,并且Microsoft.com上有明确的相关信息:


<强> Server.Execute Method

以下集合和属性可用于执行的ASP页面:

  1. 应用程序变量,即使它们已在调用页面中设置。
  2. 会话属性,即使它们是在调用页面中设置的。
  3. 服务器变量和属性,即使它们是在调用页面中设置的。
  4. 请求集合和属性,即使它们是在调用页面中设置的。这包括传递给调用页面的表单 QueryString 数据。
  5. 回复集合和属性。执行的.asp文件可能会修改HTTP标头。但是,与任何.asp文件一样,如果执行的.asp文件在向客户端发送响应后尝试修改HTTP标头,则会生成错误。

  6. 正如您所看到的,Microsoft建议将变量传递给Server.Execute方法的方式有5种。在我在Microsoft上看到这个之前,首选方法是Session,正如最佳答案所示,因为我在Microsoft.com上的信息之前看到了这一点。但是在注意到QueryStrings可以从上一页传递之后,我不得不说使用Session来传递值。如果您的应用程序要求您向执行页面添加变量,则需要Session

    但是传递变量,我会说QueryStrings,如果您的应用程序允许灵活性,它很容易应用。我确定你知道如何使用查询字符串,但从使用Server.Execute方法的意义上讲,你可以简单地这样做:

    考虑使用ASP1.aspASP2.asp

    ASP1.asp包括:

     Server.Execute("ASP2.asp")
    

    ASP2.asp包括:

     Response.Write Request("id")
    

    致电ASP1.asp?id=123时 您会注意到ASP2.asp也看到传递给ASP1.asp的Querystring相同,因此它会在ASP1.asp的响应上写123

    这比使用Session完成任务复杂得多。

答案 2 :(得分:0)

简而言之:是的,您可以在ASP.NET页面或应用程序中将QueryString值与 Server.Execute 结合使用。

您可以在正在执行的ASPX页面(page1.aspx)中汇编的QueryString参数中传递动态变量,如下所示:

    Dim intExample1 As Int = 22
    Dim strExample2 As String = "hello world"
    Server.Execute("page2.aspx?number=" & intExample1 & "&string=" & Server.UrlEncode(strExample2))

在此示例中,page2.aspx可以引用并使用以下值:

    Request.QueryString("number")
    Request.QueryString("string")

答案 3 :(得分:0)

为什么不使用#include代替server.execute

我寻找差异并发现在这种特殊情况下,使用#include是最佳解决方案: https://en.wikibooks.org/wiki/Active_Server_Pages/Server-Side_Includes#What_it_Does

您需要在父页面中定义一些变量才能在子项中使用,因此您的解决方案可能是:

dim id, a
id = 123
a = "something"
if b = "hi" then
    <!--#include file="functions.asp" -->
else
    response.write("No way dude")
end if

在functions.asp上

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

优点:

  • 简单地表现为同一页面。
  • 使用处理变量代替会话变量。
  • 不要在主网址中显示内部变量。