我的会话值不变

时间:2010-01-15 11:19:46

标签: asp.net vb.net session

Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If IsPostBack = True Then
            Session("x") = "ABC"
        End If
    End Sub

    Protected Sub btnABC_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnABC.Click
        Session("x") = "ABC"
    End Sub

    Protected Sub btnCBA_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCBA.Click
        Session("x") = "CBA"
    End Sub

    Protected Sub btnShow_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnShow.Click
        TextBox1.Text = Session("x")
    End Sub
End Class

三个按钮 - ABC,CBA和Show。 如果你点击ABC然后点击Show按钮文本框显示“ABC” 但当我点击CBA按钮然后单击显示按钮文本框再次显示“ABC”。每次将页面发布到服务器时,IsPostback属性都将为true。 因此会话重置该值。   如何克服这个问题????

3 个答案:

答案 0 :(得分:3)

如果在page_load()中设置值,则每次加载页面时都会发生此分配。也许您只想在第一次调用页面时设置此值:

If IsPostback = False Then
    Session("x") = "Something"
End If

页面的第二次加载不会覆盖您在button1_click中设置的值。

答案 1 :(得分:2)

当您按下显示按钮时,它会导致回发到服务器。 Page_Load方法首先触发,然后将“ABC”分配给Session(“x”)。然后你将Session(“x”)放入文本框中。 你可能想要的是这个:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        Session("x") = "ABC"
    End If
End Sub

答案 2 :(得分:0)

除了上面写的其他人之外,我还建议您在Page_InitComplete事件期间分配会话值。因为大多数开发人员都在Page_Load阶段工作,有时候分配Session值也可能因此而抛出错误。就像之前或之后发生的一样。你可能会犯错误等等。