【问题标题】:Passing variables in classic ASP在经典 ASP 中传递变量
【发布时间】:2014-11-25 13:47:21
【问题描述】:

我正在处理包含另一个 ASP 页面的遗留代码。

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

要从那个页面获取一个变量,比如 x,我相信我会这样做:

x = Request.Form("x")

对吗?

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

非常感谢。

【问题讨论】:

  • 在这种情况下(请参阅下面的冗长讨论),变量实际上是一个名为“Err”的内置对象,不需要定义并且全局可用。更改原始问题会使一些答案变得不需要,但是,“Err”不需要 Request.Form - 但是其中一些答案可能会帮助其他有类似问题和不同变量名称的人。谢谢
  • 经典 ASP 变量不区分大小写。
  • @Frank 如果您在 Classic ASP 中使用 jscript 作为服务器端脚本语言,那么该声明并不完全正确。
  • 好点。除了 MD5 或在 VbScript 中很难做的事情,我还没有看到有人真正在经典 asp 中使用 Jscript。
  • 虽然这篇文章在我有偏见的拙见中被否决了,但它会为那些对经典 ASP 完全陌生的人提供很好的讨论。我试图学习经典的 ASP,但当它不是“经典”时,我没有学过它,因为我当时正在学习 C 和 C++,并且后来添加了很多 C#,偶尔使用 Matlab 等。

标签: variables error-handling asp-classic parameter-passing webpage


【解决方案1】:

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

例如,如果您有三个文件:

File_1.asp

<h1>Hello, World!</h1>

File_2.asp

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

文件_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

-- 编辑--

只是补充(错过了帖子末尾的问题):

区分大小写取决于 Classic 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

希望这会有所帮助。

【讨论】:

  • 没有必要问@Paul,但它是一个非常详细简洁的答案。 +1
  • 感谢 Lanky - 感谢。 :o)
【解决方案2】:

假设PAGE1.ASP 声明了一个变量,例如dim foo,该变量是全局变量,并且父页面可以通过foo 访问它,例如foo = "bar".

【讨论】:

    【解决方案3】:

    如果您在第一页上有类似 &lt;input type="text" value="something" name="x"/&gt; 的内容,那么是的,request.form(x) 将获取该值,假设表单具有 post 的方法

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

    【讨论】:

    • 抱歉,没有这样声明。
    • x 显然是一个用于保存事件的对象,因为它使用“.raise”事件。我正在使用 VS 2010 查看这个文件,它实际上是在 VS 6 中创建的;我不确定项目文件是否定义了这些......无论如何,一个对象是否会自动用于另一个文件。这个的目的显然是引发错误......
    • 有人对这种情况有什么想法吗?定义通常“保留”在 .asp 文件中还是其他地方?我对经典 ASP 有点陌生......这是遗留代码。
    • @JosephDoggie 您所指的对象是Err 对象引用与x 有什么关系我不知道。 Raise() 方法是Err 对象的一个​​方法,它允许您提出自己的错误。说真的 RTFM 或者至少显示一些代码来给我们一些上下文!
    • @JosephDoggie RTFM 的评论纯粹是基于这样一种观点,即当我开始研究一项新技术时,我首先要做的就是研究它阅读所有教程和书籍,然后才能获得我的贪婪手套。 d 甚至考虑寻求帮助。 Err 是一个保留对象,因此在 VBScript 参考中被大量提及。然而,所有这些仍然完全超出了您最初问题的范围(这是我之前提出的观点)。对不起,如果我的 cmets 冒犯了你,那不是我的本意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多