2016-05-23 8 views
1

Hier ist ein Beispielcode, das Problem zu simulieren:klassischen ASP - Strange Type Mismatch Fehler

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 

Wie Sie sehen können, functs.asp ich s enthalten in der Datei buy.asp. Auf diese Weise funktioniert es ohne Probleme (Fehler) beim Öffnen http://localhost/main.asp?d=buy. Aber jetzt versuche ich functs.asp innen Main.asp enthalten, wie folgt aus:

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 

Nun, wenn inbegriffen functs.asp innen main.asp, ich habe eine Fehlermeldung:

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

Bitte, kann mir jemand helfen? Ich weiß wirklich nicht, was los ist ...

Danke!

Antwort

1

Es ist nicht seltsam, aber ein erwartetes Verhalten von Server.Execute in der Tat.

Von Remarks Abschnitt:

Wenn eine Datei mit # include in der anrufenden Seite enthalten ist, der ausgeführt .asp wird es nicht verwenden. Beispielsweise haben Sie möglicherweise eine Unterroutine in einer Datei, die in Ihrer aufrufenden Seite enthalten ist, aber die ausgeführte ASP wird den Namen der Unterroutine nicht erkennen. Sie müssen die Datei in jeder ausgeführten ASP-Datei, die das Unterprogramm erfordert, einschließen.

+0

Ok, danke! Ich werde versuchen, einen Workaround zu finden ... – Guybrush

+0

@Paruba du bist willkommen. Es gibt nicht viele Optionen. Ich würde eine generische ASP-Datei vorbereiten, die mit allen Funktionen enthalten ist, und Deklarationen werden in den ASP-Seiten benötigt, die von 'Server.Execute' ausgeführt werden. –

+0

Kul-Tigin, du meinst ersetzen die #include file = "functs.asp" mit Server.Execute ("functs.asp")? – Guybrush