Непоследовательные результаты от ASP classic - PullRequest
0 голосов
/ 02 марта 2012

У меня несколько нервная проблема при использовании постоянных значений. У меня есть простая страница с именем «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 ]

6 голосов
/ 02 марта 2012

Вы сравниваете строку с числом.Вы должны убедиться, что они последовательны.Поэтому измените эту строку:

const cSortFielda = 1

На:

const cSortFielda = "1"

Или измените эту строку:

vSortField = Request("SortField")

На:

vSortField = CLng(Request("SortField"))

Первый пример сравнивает строку со строкой, а второй пример сравнивает число с числом.

1 голос
/ 02 марта 2012

Сравнение строки с целым числом приводит к false. Добавьте их, и вы увидите.

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

Перед сравнением убедитесь, что обе переменные имеют одинаковый тип или преобразованы. Поскольку вы имеете дело с QueryString, было бы проще использовать строковый тип, т.е. const cSortFielda = "1".

1 голос
/ 02 марта 2012

Все переменные являются вариантами в 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")
...