2012-03-02 8 views
0

定数値を使用すると、やや問題があります。変数を定数に設定し、querystring値(存在する場合)に設定する "test.asp"という簡単なページがあります。次に、選択されたケースは、変数が定数と一致するかどうかをチェックし、メッセージ "matched"を出力します。問題は、クエリ文字列の値が定数と同じときにaspが認識しないことです。 私は2回、 "test.asp"と "test.asp?SortField = 1"を実行しました。最初の試行は期待どおりに実行されますが、2番目の試行では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")) 

最初の例では、文字列に文字列を比較します、2番目の例はnumberとnを比較しますアンバー。

+0

もちろん、ああ!ありがとうございました!そのような簡潔な答えに感謝します。 – user328414

1

すべての変数は、その変数にリテラル値を指定しない限り、VBScriptのバリアントです。

したがって、const CSortFieldaは数値です。

しかしvSortFieldは、どちらかのSortFieldクエリ文字列項目の値

の文字列を保持している文字列

Const cSortFields = "1" 

または数

としてのSortFieldを解析するconstの値を変更する変異体であり、

実際の問題とは関係ありませんが、フィールドがクエリ文字列から来るように指定することもお勧めします。

Request.QueryString.Item("SortField") 
1

文字列と整数を比較するとfalseになります。これらを追加すると、あなたが表示されます。

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

比較する前に、両方の変数が同じ型か変換済みであることを確認してください。あなたがQueryStringを扱っているので、文字列型、すなわちconst cSortFielda = "1"を使う方が簡単です。

関連する問題