使用常量值时,我有一点令人不安的问题。我有一个名为“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>
我是否遗漏了一些明显的或者错误的经典之作?
感谢您的帮助。
答案 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"
更容易。