Непоследовательные результаты от ASP classic
У меня несколько нервная проблема при использовании постоянных значений. У меня есть простая страница с именем "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?
Спасибо за любую помощь.
3 ответа
Вы сравниваете строку с числом. Вы должны убедиться, что они последовательны. Так что либо измените эту строку:
const cSortFielda = 1
Для того, чтобы:
const cSortFielda = "1"
Или измените эту строку:
vSortField = Request("SortField")
Для того, чтобы:
vSortField = CLng(Request("SortField"))
Первый пример сравнивает строку со строкой, а второй пример сравнивает число с числом.
Сравнение строки с целым числом приводит к false. Добавьте их, и вы увидите.
Response.write TypeName(vSortField) & "<br/>"
Response.Write TypeName(cSortFielda) & "<br/>"
Перед сравнением убедитесь, что обе переменные имеют одинаковый тип или преобразованы. Поскольку вы имеете дело с QueryString, было бы проще использовать строковый тип, т.е. const cSortFielda = "1"
,
Все переменные являются вариантами в VBScript, если вы не укажете буквальное значение для этой переменной.
Так что const CSortFielda это число.
Но vSortField - это вариант, который содержит STRING значения элемента строки запроса SortField.
Либо измените значение 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")