我在代码的一个时刻设置了一个会话对象:
Session("my_name") = "Dave"
稍后在我的代码中,我给用户一个更新此对象的机会:
Session("my_name") = TextBox1.Text
我重新加载页面并显示一个简短的 hello 语句,如下所示:
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
结束课程
The Page
's Load
事件触发sooner比Button
的点击事件。因此,在运行时,值Session("my_name")
仍然是“戴夫”。
如果您想正确设置它,您应该将Label1.Text = CStr(Session("my_name"))
进入PreRender
您页面的事件处理程序。
你把它剪下来放进去Button
's 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 页面生命周期概述 http://msdn.microsoft.com/en-us/library/ms178472.aspx.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)