【问题标题】:Inconsistent results from ASP classic来自 ASP 经典的结果不一致
【发布时间】:2012-03-06 23:54:56
【问题描述】:

在使用常量值时,我遇到了一个有点令人不安的问题。我有一个名为“test.asp”的简单页面,它将变量设置为常量,然后设置为查询字符串值(如果存在)。然后一个选择案例检查变量是否与常量匹配并输出一条消息“匹配”。问题是当查询字符串值与常量相同时,asp 无法识别。 我已经运行了 2 次尝试,“test.asp”和“test.asp?SortField=1”。第一次尝试按预期运行,但第二次尝试报告 1 与 1 不同。 该页面的代码如下。

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<head></head>
<body>

<%
const cSortFielda = 1
dim vSortField

vSortField = cSortFielda
if not isempty(Request("SortField")) then
    vSortField = Request("SortField")
    end if

select case vSortField
    case cSortFielda
        response.write "matched</br>"

    case else
        response.write "failed</br>"
        response.write "vSortField = " & vSortField & "(" & asc(vSortField) & ") </br>"
        response.write "cSortFielda = " & cSortFielda & "(" & asc(cSortFielda) & ") </br>"
        response.write "vSortField = cSortFielda is " & (vSortField = cSortFielda) & "</br>"

        end select
%>

</body>
</html>

是我遗漏了一些明显的东西,还是 asp classic 有问题?

感谢您的帮助。

【问题讨论】:

    标签: asp-classic query-string constants mismatch


    【解决方案1】:

    您正在将字符串与数字进行比较。你需要确保它们是一致的。所以要么改变这一行:

    const cSortFielda = 1
    

    收件人:

    const cSortFielda = "1"
    

    或者改变这一行:

    vSortField = Request("SortField")
    

    收件人:

    vSortField = CLng(Request("SortField"))
    

    第一个例子比较字符串和字符串,第二个例子比较数字和数字。

    【讨论】:

    • 啊当然!谢谢你!谢谢你这么简洁的回答。
    【解决方案2】:

    比较字符串和整数的结果是假的。添加这些,你会看到。

    Response.write TypeName(vSortField) & "<br/>"
    Response.Write TypeName(cSortFielda) & "<br/>"
    

    确保两个变量的类型相同或在比较之前进行转换。由于您正在处理 QueryString,因此使用字符串类型会更容易,即const cSortFielda = "1"

    【讨论】:

      【解决方案3】:

      除非您为该变量指定文字值,否则所有变量都是 VBScript 中的变体。

      所以 const CSortFielda 是一个数字。

      但是 vSortField 是一个变体,它保存了 SortField 查询字符串项的值的 STRING

      要么将 const 值更改为字符串

      Const cSortFields = "1"
      

      或将 SortField 解析为数字

      If Not isEmpty(Request("SortField")) then
          If IsNumeric(Request("SortField")) then
              vSortField = CLng(Request("SortField"))
          End If
      End If
      

      我还建议指定该字段来自查询字符串,尽管这与您的实际问题无关:

      Request.QueryString.Item("SortField")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-21
        • 1970-01-01
        • 2012-10-31
        • 1970-01-01
        相关资源
        最近更新 更多