Dot-Net
會話對像不更新 ASP.NET
我在程式碼中的一個節點設置了一個會話對象:
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結束類
‘事件比
Page‘點擊事件Load觸發得更快。Button因此,在它執行時, 的值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 頁面生命週期概述。