以下是模拟问题的示例代码:
functs.asp
<%
Function SecureStr(Str)
Dim Res
Res = Trim(Str)
If (Res <> "") Then
Res = Replace(Res, "'", "")
Res = Replace(Res, ";", "")
Res = Replace(Res, "=", "")
End If
SecureStr = Res
End Function
%>
main.asp
<%
Option Explicit
Dim Dept
Dept = Request.QueryString("d")
%>
<html>
<body>
<%=Server.Execute(Dept & ".asp")%>
</body>
</html>
buy.asp
<!--#include file="functs.asp"-->
<%
Dim Name
Name = SecureStr(Request.Form("name"))
%>
BUY CONTENT
如您所见,functs.asp包含在buy.asp文件中。这种方式在打开http://localhost/main.asp?d=buy时没有问题(错误)。但现在我想在main.asp中包含functs.asp,如下所示:
main.asp
<%
Option Explicit
Dim Dept
Dept = Request.QueryString("d")
%>
<!--#include file="functs.asp"-->
<html>
<body>
<%=Server.Execute(Dept & ".asp")%>
</body>
</html>
buy.asp
<%
Dim Name
Name = SecureStr(Request.Form("name"))
%>
BUY CONTENT
好吧,当在main.asp中包含functs.asp时,我收到一条错误消息:
Microsoft VBScript runtime error '800a000d'
Type mismatch: 'SecureStr'
/buy.asp, line 3
拜托,有人可以帮帮我吗?我真的不知道发生了什么......
谢谢!
答案 0 :(得分:1)
这并不奇怪,但实际上是Server.Execute的预期行为。
来自Remarks部分:
如果使用#include将文件包含在调用页面中,则 执行.asp不会使用它。例如,您可能有一个子程序 在您的调用页面中包含的文件中,但执行的.asp 将无法识别子程序名称。您必须包含该文件 每个执行.asp都需要子程序。