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。 因此会话重置该值。 如何克服这个问题????
答案 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值也可能因此而抛出错误。就像之前或之后发生的一样。你可能会犯错误等等。