2012-03-02 4 views
0

상수 값을 사용할 때 다소 문제가 있습니다. "test.asp"라는 간단한 페이지가 있는데 변수를 상수로 설정 한 다음 쿼리 문자열 값 (존재하는 경우)으로 설정합니다. 그런 다음 선택 사례가 변수가 상수와 일치하는지 확인하고 "일치"메시지를 출력합니다. 문제는 asp가 쿼리 문자열 값이 상수와 동일한 지 인식하지 못한다는 것입니다. "test.asp"및 "test.asp? SortField = 1"두 번 실행했습니다. 첫 번째 시도는 예상대로 실행되지만 두 번째 시도는 1이 1과 같지 않음을보고합니다. 이 페이지의 코드는 다음과 같습니다.ASP 클래식에서 일치하지 않는 결과

<%@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입니까?

도움 주셔서 감사합니다.

답변

6

문자열을 숫자와 비교합니다. 일관성이 있는지 확인해야합니다.

const cSortFielda = 1 

사람 : : 그래서 하나는이 라인 변경

const cSortFielda = "1" 

을 또는이 라인 변경 :

vSortField = Request("SortField") 

사람 :

vSortField = CLng(Request("SortField")) 

첫 번째 예제를 문자열로 문자열을 비교 , 두 번째 예제는 숫자를 n과 비교한다. 엄버.

+0

물론 아! 고맙습니다! 그런 간결한 대답에 감사드립니다. – user328414

1

모든 변수는 해당 변수에 리터럴 값을 지정하지 않는 한 VBScript의 변형입니다.

그래서 const CSortFielda는 숫자입니다.

그러나 vSortField는하는 SortField 쿼리 문자열 항목

하나의 값의 문자열을 보유하고 변형 인 문자열을

Const cSortFields = "1" 

일 또는 숫자로하는 SortField를 구문 분석 CONST 값을 변경

If Not isEmpty(Request("SortField")) then 
    If IsNumeric(Request("SortField")) then 
     vSortField = CLng(Request("SortField")) 
    End If 
End If 

실제 문제와 관련이 없지만 필드가 쿼리 문자열에서 오는 것으로 지정하는 것이 좋습니다.

Request.QueryString.Item("SortField") 
1

문자열과 정수를 비교하면 결과가 false입니다. 이것들을 추가하면 볼 수 있습니다.

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

비교하기 전에 두 변수의 유형이 같거나 변환되어 있는지 확인하십시오. QueryString을 다루므로 문자열 유형 (예 : const cSortFielda = "1")을 사용하는 것이 더 쉽습니다.

관련 문제