-2

我正在处理遗留代码,其中包含另一个ASP页面。在传统ASP中传递变量

<!--#INCLUDE virtual="/PAGE1.ASP"--> 

得到一个变量,例如x,从该页面,我beleive我会做:

x = Request.Form("x") 

是正确的?

此外,变量名称是否区分大小写的经典.ASP文件?

非常感谢。

+0

在这种情况下(参见下面冗长的讨论),变量实际上是一个名为“Err”的内置对象,不需要定义并且是全局可用的。改变原来的问题会使一些不需要的答案,但是,“错误”不需要Request.Form - 但是这些答案中的一些可能会帮助其他人有类似的问题和不同的变量名称。谢谢 – JosephDoggie 2014-10-01 19:30:43

+1

经典ASP变量不区分大小写。 – Frank 2014-10-02 19:42:52

+2

@Frank如果您在Classic ASP中使用[tag:jscript]作为您的服务器端脚本语言,那么该语句不完全正确。 – Lankymart 2014-10-09 12:28:00

回答

2

如果你有这样的事情<input type="text" value="something" name="x"/>的第一页上,然后是的,request.form(x)会抓住这个值假设形式有post

http://www.w3schools.com/asp/asp_inputforms.asp

+0

对不起,它没有声明那样。 – JosephDoggie 2014-09-30 20:40:45

+0

x显然是一个持有事件的对象,因为它使用了“.raise”事件。我使用VS 2010来查看这个文件,它实际上是在VS 6中创建的;我不确定项目文件是否定义了这些......无论如何将一个对象自动提供给另一个文件。这个人的目的是显然会引起错误... – JosephDoggie 2014-09-30 20:42:57

+0

任何人对这种情况有任何想法?定义通常“保存”在.asp文件或其他地方?我有点新的经典ASP ....这是遗留代码。 – JosephDoggie 2014-09-30 20:55:25

2

假设PAGE1.ASP的方法声明为dim foo这样一个变量,该变量是全球性的,父页面可以通过foo访问它,例如foo = "bar"

6

您应该将页面内置到一个连续的页面中,这样如果包含多个.asp文件,它们将构建完成的页面。

举例来说,如果你有三个文件:

File_1.asp

<h1>Hello, World!</h1> 

File_2.asp

<p>This file will be included too!</p> 

File_3.asp

<%Dim version 
version = 1.1%> 

...和它们包含在一个核心文件...

File_Output.asp

<!-- #include virtual="file_1.asp" --> 
<!-- #include virtual="file_2.asp" --> 
<!-- #include virtual="file_3.asp" --> 
<% Response.Write(version) %> 

File_Output.asp将显示在File_3.asp定义的version变量。

有一个很好的关于它的小文章here

- 编辑 -

我想补充(错过了你的帖子的末尾的问题):

区分大小写依赖于传统的ASP使用的脚本语言。使用VBScript变量名称的情况下敏感,而与JScript(其中,在语法上,非常像JavaScript)变量区分大小写。

此外,为解决Err对象:

有一个伟大的小片here,但得到的基本事实,你需要用你的代码中的错误捕获块,像这样:

On Error Resume Next '<-- This line starts trapping errors 
    ... 
On Error Goto 0   '<-- This line stops trapping errors 

如果在此块中发生错误,您需要处理它。与ASP.NET,Java等不同,您不会被告知有错误;没有好的Try...Catch包装来很好地处理错误。你必须预测哪里会发生错误。通常这很明显。如果您的脚本中有数据库操作,那么在数据读取或写入后直接测试错误是个好主意。要检查错误很简单 - 你测试Err对象的Number属性:

On Error Resume Next '<-- This line starts trapping errors 
    'Some database manipulation... 
    If Err.Number <> 0 Then 
     ... 'Handle the error 
    End If 
On Error Goto 0   '<-- This line stops trapping errors 

这可以扩展到考虑到不同的错误信息:

On Error Resume Next '<-- This line starts trapping errors 
    'Some database manipulation... 
    Select Case Err.Number 
     Case 1 
      ... 'Handle the error 
     Case 2 
      ... 
     Case 3021 'No data returned 
      Response.Write("No data was returned.") 
    End Select 
On Error Goto 0   '<-- This line stops trapping errors 

希望这有助于。

+0

我的帖子有问题吗?有人下了我投票... – Paul 2014-10-03 08:20:58

+1

没问题@Paul,但它是一个非常详细的简洁的答案。 +1 – Lankymart 2014-10-03 17:18:22

+0

谢谢Lanky - 赞赏。 :O) – Paul 2014-10-06 07:43:01