我在代码的一个时刻设置了一个会话对象:
Session("my_name") = "Dave"
Session("my_name") = TextBox1.Text
Label1.Text = "Hello" & CStr(Session("my_name"))
结果是:“Hello Dave”无论我改变Session(“my_name”)也是如此.
编辑:这是我写的一个完整的代码隐藏演示:
Public Class WebForm1 Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object,ByVal e As System.EventArgs) Handles Me.Load Response.Cache.SetCacheability(HttpCacheability.NoCache) Response.ExpiresAbsolute = DateTime.Now.AddMonths(-1) If Page.IsPostBack = False Then Session("my_name") = "Dave" End If Label1.Text = CStr(Session("my_name")) End Sub Protected Sub Button1_Click(ByVal sender As Object,ByVal e As EventArgs) Handles Button1.Click Session("my_name") = TextBox1.Text End Sub
结束类
解决方法
Page的Load事件比Button的click事件更快启动.因此,在运行时,Session(“my_name”)的值仍然是“Dave”.
如果您想正确设置它,您应该将Label1.Text = CStr(Session(“my_name”))放入页面的PreRender事件处理程序中.
你也把它放入了Button的Click事件中(当然,在设置了会话值之后),但我想你以后想要使用会话来存储对象,以减少不重要的目的.
(我想你以后想要将会话用于更高级的目的.毕竟,如果你只想更改标签的文本,那么使用会话会有什么意义?)
基本上,这就是你想要的:
>如果不是回发,则Page_Load将Session(“my_name”)设置为“Dave”
> Button1_Click将Session(“my_name”)设置为文本框的文本
> Page_PreRender设置标签的文本.
以下是您当前代码所发生的情况:
>如果不是回发,则Page_Load将Session(“my_name”)设置为“Dave”
> Page_Load设置标签的文本
> Button1_Click将Session(“my_name”)设置为文本框的文本
您可以在此处阅读有关该主题的更多信息:ASP.NET Page Life Cycle Overview.