Pages需要两个加载来更改字符串

时间:2010-11-25 15:36:56

标签: asp.net vb.net

我有以下代码,除了一个小问题外似乎没问题。

当用户首次访问该页面时,会显示正确的电话号码,但在第二次访问时 - 如果他们应该看到不同的号码,则需要在该号码更改为新号码之前加载该页面两次。

我不太确定如何解释这个问题,所以如果您需要更多信息请咨询。

  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

1 个答案:

答案 0 :(得分:3)

这可能是因为在下一页请求之前不会设置cookie。 Cookie在响应中作为“SET-COOKIE”标头发送给客户端。这意味着当您稍后在代码中执行Request.Cookies时,客户端尚未将它们发送到页面。这发生在用户的下一个请求中。

因此,Response.CookiesRequest.Cookies不同。

您可以做的是确定要设置的Cookie,保存在私有变量中,然后将Cookie设置为客户端的正常情况。然后,在代码中稍后检查变量而不是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)