2010-11-25 3 views
0

マイナーな問題を除いて問題なく動作するように見える次のコードがあります。文字列を変更するにはページに2つの読み込みが必要です

ユーザーが最初にページにアクセスすると、正しい電話番号が表示されますが、2回目の訪問時に表示されます。異なる番号が表示される場合は、新しい番号に変更する前にページを2回ロードする必要があります。

私はこのベストを説明する方法がわからないので、もっと情報が必要な場合は質問してください。

Public freeCallNumber As String 

Private Function getFreeCallNumber(ByVal value As String) As String 
    Select Case value 
     Case "EZ12" 
      Return "0800 11 22 333" 
     Case "WT45" 
      Return "0800 44 55 666" 
     Case Else 
      Return "0800 77 88 999" 
    End Select  
End Function  

Sub Page_Load(ByVal Sender As Object, ByVal E As EventArgs) 

    'set cookies here' 

    If Not Request.Cookies("LatestRefer") is Nothing Then 
     freeCallnumber = getFreeCallNumber(Request.Cookies("LatestRefer").Value) 
    Else 
     freeCallnumber = getFreeCallNumber(Request.Cookies("FirstRefer").Value) 
    End If   

End Sub 

答えて

3

おそらく、次のページリクエストまでCookieが設定されていないためです。クッキーは応答の中でクライアントに "SET-COOKIE"ヘッダーとして送られます。つまり、後であなたのコードでRequest.Cookiesを実行すると、クライアントはまだそれらをページに送っていません。これは、ユーザーからの次の要求で発生します。

したがって、Response.CookiesRequest.Cookiesと同じではありません。

あなたができることは、設定するクッキーを決定し、プライベート変数に保存してから、クッキーを通常どおりクライアントに設定することです。その後、あなたのコードで、Request.Cookiesの代わりに変数をチェックします。

Private cookieReferer as String 

Sub Page_Load(ByVal Sender As Object, ByVal E As EventArgs) 

    cookieReferer = "defautlValue" 
    // Add cookie with value from 'cookieReferer' 

End Sub 


    freeCallnumber = getFreeCallNumber(cookieReferer) 
+0

まさに私がやったことです。ありがとう。とても有難い。 – Tom

関連する問題