2016-05-23 3 views
1

Вот пример кода для имитации проблемы:Классический ASP - Strange Тип ошибки несовпадения

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 i s входит внутри покупка.asp файл. Таким образом, он работает без проблем (ошибок) при открытии http://localhost/main.asp?d=buy. Но теперь я пытаюсь включить functs.asp внутри main.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 

Ну, когда включен 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

@Paruba приветствую вас. вариантов не так много. Я бы подготовил общий asp-файл для включения со всеми функциями, и декларации потребуются на страницах asp, которые будут выполняться с помощью 'Server.Execute'. –

+0

Kul-Tigin, вы имеете в виду заменить #include file = "functs.asp" на Server.Execute ("functs.asp")? – Guybrush

Смежные вопросы