Dot-Net

會話對像不更新 ASP.NET

  • December 21, 2018

我在程式碼中的一個節點設置了一個會話對象:

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頁面的事件處理程序中。

您也將其放入ButtonClick事件中(當然是在設置會話值之後),但我想您以後想使用會話來儲存對象,以達到不那麼瑣碎的目的。

(我想您以後想將會話用於更高級的目的。畢竟,如果您只想更改標籤的文本,那麼使用會話有什麼意義呢?)

基本上,這就是你想要的:

  • 如果不是回發,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 頁面生命週期概述

引用自:https://stackoverflow.com/questions/2725279