Asp classic ASP 3.0-服务器。执行问题:遭受;ASP健忘症“;(案文订正)

Asp classic ASP 3.0-服务器。执行问题:遭受;ASP健忘症“;(案文订正),asp-classic,Asp Classic,我正在使用IIS 6,并创建了两个ASP 3.0文件: -Main.asp -Colors.asp Main.asp 没什么…还有ASP健忘症-谁 编辑2 亲爱的比特维兹: 我正在使用Server.Execute而不是#include来释放服务器。如您所知#在ASP中始终首先处理包含,无论它们是否在If块中。我基本上是在尝试通过server.Execute实现动态服务器端包含,根据Microsoft的说法,它实际上可以放在If块中: (注意:这本来是一篇文章,但该网站已经不存在了,该链接现在是

我正在使用IIS 6,并创建了两个ASP 3.0文件: -Main.asp -Colors.asp

Main.asp 没什么…还有ASP健忘症-谁

编辑2

亲爱的比特维兹:

我正在使用Server.Execute而不是#include来释放服务器。如您所知#在ASP中始终首先处理包含,无论它们是否在
If
块中。我基本上是在尝试通过server.Execute实现动态服务器端包含,根据Microsoft的说法,它实际上可以放在
If
块中:

(注意:这本来是一篇文章,但该网站已经不存在了,该链接现在是一个数字域的重定向。请随意搜索Paul Litwin的文章,如果可以找到,请更新该链接。)


我仍然需要在这方面的帮助,或者对我的特殊情况进行更好的解释。我在Color.asp文件中有很多变暗的变量,如果sColor=False,我不希望服务器去处理这些变量。

我想知道这是否是一个范围问题?我发现您可能会遇到两个范围问题:

首先,由于您的sRed在另一个文件中,所以在运行server.execute时,范围是否仅限于该文件

其次,由于您在if-then中调用server.execute,我希望您的另一个文件的作用域介于if和endif之间。然后在endif之后检查sRed。在这两种情况中,我认为第二种可能性更大。试试你的

If sRed then
 Response.Write "Color is Red" 
End If 

阻塞内部您的第一个if-then阻塞,在服务器之后。执行并查看是否是这种情况。

我想知道这是否是范围问题?我发现您可能会遇到两个范围问题:

首先,由于您的sRed在另一个文件中,所以在运行server.execute时,范围是否仅限于该文件

其次,由于您在if-then中调用server.execute,我希望您的另一个文件的作用域介于if和endif之间。然后在endif之后检查sRed。在这两种情况中,我认为第二种可能性更大。试试你的

If sRed then
 Response.Write "Color is Red" 
End If 

阻塞内部您的第一个if然后阻塞,在服务器之后。执行并查看是否是这种情况。

不要认为不做一些更改就可以完成。使用server.execute,这两个页面完全不知道彼此的局部变量(参见下面的证明)。包含会更好,尽管您确实失去了条件能力

请求/响应对象由两个文件共享,因此您可以根据需要使用它们。至于在文件之间发送变量,您唯一的选择是会话或应用程序变量。请参见下面的代码示例

文件1:

dim localParent
localParent="start Value"
Response.write("Parent:"&localParent&"<br>")
Server.Execute "file.asp"

Response.write("Parent after Exec:"&localParent&"<br>")
会话变量传递: 文件1:

文件2:

Dim myLocalVar
myLocalVar = session("myVar")   ' Get variable from session
'Do stuff to myLocalVar
session("myVar") = myLocalVar 'Put variable back into session for calling page to use.

不要认为没有一些改变就可以做到。使用server.execute,这两个页面完全不知道彼此的局部变量(参见下面的证明)。包含会更好,尽管您确实失去了条件能力

请求/响应对象由两个文件共享,因此您可以根据需要使用它们。至于在文件之间发送变量,您唯一的选择是会话或应用程序变量。请参见下面的代码示例

文件1:

dim localParent
localParent="start Value"
Response.write("Parent:"&localParent&"<br>")
Server.Execute "file.asp"

Response.write("Parent after Exec:"&localParent&"<br>")
会话变量传递: 文件1:

文件2:

Dim myLocalVar
myLocalVar = session("myVar")   ' Get variable from session
'Do stuff to myLocalVar
session("myVar") = myLocalVar 'Put variable back into session for calling page to use.

Bitwize是完全正确的-调用页无法访问已执行页的本地变量,并且已执行页也无法访问调用页的本地变量。如果需要共享局部变量,则需要使用include指令

我已经使用
Server.Execute()
技术构建了整个ASP站点体系结构,并且每个执行的脚本都独立有效地执行。您只能通过
应用程序
会话
对象共享变量,这两个对象都有问题


实现所需效果的唯一其他方法是通过代码中的HTTP请求发送到其他脚本,并让这些脚本返回JSON/XML结构和相关信息,但是这将比仅仅使用include指令增加更多的开销。

Bitwize是完全正确的-调用页无法访问已执行的页本地变量,并且已执行的页也无法访问调用页本地变量。如果需要共享局部变量,则需要使用include指令

我已经使用
Server.Execute()
技术构建了整个ASP站点体系结构,并且每个执行的脚本都独立有效地执行。您只能通过
应用程序
会话
对象共享变量,这两个对象都有问题


实现所需效果的唯一其他方法是通过代码中的HTTP请求发送到其他脚本,并让这些脚本返回JSON/XML结构和相关信息,但这将比仅使用include指令增加更多的开销。

这是一个范围问题,这是正确的。执行
Server.Execute()
实际上相当于从服务器请求该页面,并在调用
Server.Execute()时将返回的输出直接合并到页面中。已执行页面无法从调用页面查看本地变量,相反,调用页面无法访问已执行页面的本地变量,尽管我非常确定您不能在
Server.Execute()调用中使用querystring变量。执行的页面可以访问与调用页面完全相同的
请求
对象,因此您无法传递此变量way@RobV-我被纠正了。无法通过server.execute发送查询字符串变量。这只剩下会话/应用程序。您认为这是一个范围问题是正确的。执行
Server.Execute()
实际上相当于从serv请求该页面
Response.write("Child:"&localParent&"<br>")
localParent = "Child changed"
Response.write("Child Afer set:"&localParent&"<br>")
Parent:start Value
Child:
Child Afer set:Child changed
Parent after Exec:start Value
Dim myVar
'Do stuff
session("myVar") = myVar ' Save variable in session
Server.Execute "file.asp"
myVar = session("myVar") 'get changed variable back out of session
Dim myLocalVar
myLocalVar = session("myVar")   ' Get variable from session
'Do stuff to myLocalVar
session("myVar") = myLocalVar 'Put variable back into session for calling page to use.