2016-05-23 24 views
1

が問題をシミュレートするサンプルコードです:クラシックASP - 奇妙な種類の不一致エラーここ

buy.asp

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> 

<!--#include file="functs.asp"--> 
<% 
Dim Name 
Name = SecureStr(Request.Form("name")) 
%> 
BUY CONTENT 

ご覧のとおり、functs.asp i buy.aspファイルに含まれています。これにより、開いたときに問題(エラー)なしで動作します。http://localhost/main.asp?d=buy

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 

、functs.asp内部に含ま:しかし、今、私はこのように、main.asp内部functs.aspを含めるようにしようとしていますmain.asp、エラーメッセージが表示されます:

Microsoft VBScript runtime error '800a000d' 
Type mismatch: 'SecureStr' 
/buy.asp, line 3 

私に助けてくれますか?私は実際に何が起こっているのか分かりません...

ありがとう!

答えて

1

これは奇妙ではありませんが、実際にはServer.Executeの予想される動作です。 Remarksセクションから

ファイルの#includeを使用して、呼び出しページに含まれている場合、 実行の.aspは、それを使用しません。たとえば、呼び出すページに含まれるファイルにサブルーチン が含まれている可能性がありますが、.asp を実行するとサブルーチン名が認識されません。サブルーチンを必要とする.aspのファイルを に含める必要があります。

+0

ありがとうございました!私は回避策を見つけようとします... – Guybrush

+0

@パルバようこそ。あまりにも多くのオプションがありません。私はすべての関数をインクルードするための一般的なaspファイルを準備し、 'Server.Execute'によって実行されるaspページで宣言が必要になります。 –

+0

Kul-Tigin、#include file = "functs.asp"をServer.Execute( "functs.asp")に置き換えることを意味しますか? – Guybrush

関連する問題