Непоследовательные результаты от 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")
Другие вопросы по тегам