[英]Session Objects not Updating ASP.NET
我在代碼的一個時刻設置了一個會話對象:
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
事件中(當然,在設置了會話值之后),但我想你以后想要使用會話來存儲對象,以達到不太重要的目的。
(我想你以后想把這個會話用於更高級的目的。畢竟,如果你只想更改標簽的文本,那么使用會話會有什么意義?)
基本上,這就是你想要的:
以下是您當前代碼所發生的情況:
您可以在此處閱讀有關該主題的更多信息: ASP.NET頁面生命周期概述 。
Page.Load
在Button1_Click
之前運行 - 因此您將文本框的值設置為會話中的任何內容,然后稍后獲取該文本框的內容(已經覆蓋)並將其彈回到會話中。
您沒有正確設置Session變量的默認值。 基本上你是在每個頁面加載時將會話變量設置為'Dave'而不是回發。 這甚至包括回調和頁面重新加載。
要設置會話默認嘗試...
if( String.IsNullOrEmpty(Session["my_name"]) )
{
Session["my_name"] = "Dave";
}
現在,您可以使用會話變量而不進行測試,如果它是Postback或Callback的一部分。
這對我有用:
objectName objectInstance = Session["mySession"] as objectName; //offload
objectInstance.attributeToUpdate = true; //update
Session["mySession"] = objectInstance; //re-assign
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.