来自ASP经典的结果不一致

时间:2012-03-02 17:49:26

标签: asp-classic query-string constants mismatch

使用常量值时,我有一点令人不安的问题。我有一个名为“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>

我是否遗漏了一些明显的或者错误的经典之作?

感谢您的帮助。

3 个答案:

答案 0 :(得分:6)

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

const cSortFielda = 1

要:

const cSortFielda = "1"

或更改此行:

vSortField = Request("SortField")

要:

vSortField = CLng(Request("SortField"))

第一个示例将字符串与字符串进行比较,第二个示例将数字与数字进行比较。

答案 1 :(得分:1)

除非您为该变量指定文字值,否则所有变量都是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")

答案 2 :(得分:1)

将字符串与整数进行比较会导致false。添加这些,你会看到。

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

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