2011-10-18 31 views
-1

我建在asp.net和c#的Web應用程序的價值,我存儲文本框的文本會話變量是這樣的:無法得到更新會話變量和文本框

Session["data"]=TextBox1.Text; 

,按鈕上點擊事件我正在將用戶重定向到另一個頁面。在第二頁中,我正在使用此變量會話[「數據」]並且在頁面2中有一個後退按鈕,我再次將其重定向到page1,其中textbox1存在。按鈕點擊事件,我重定向到page2,事件是這樣的代碼,

Session["data"]=TextBox1.Text; 
Response.Redirect("page2.aspx"); 

現在,當我訪問Session [「data」]的值時,它給了我以前的值。由於TextBox1的內容可能會更改,所以這些更改尚未顯示。

請告訴我我要去哪裏錯了。

+0

在page1.aspx中的Page_load中有什麼設置Session [「data」]的值嗎? – ChrisBint

+0

我正在檢查if(Session [「data」]!= null),然後TextBox1.Text = Session [「data」]。ToString();此代碼在用戶單擊page2.aspx上的後退按鈕時設置TextBox1的值。 –

回答

0

我不認爲你使用的代碼是worng。您請設置一箇中斷點,然後再次檢查值是否正確分配 或 您只需將會話設置爲空,然後在單擊事件中爲其分配文本框值即可。

+0

將Session變量的值賦值爲null工作......謝謝 –

0

我真的不明白你想在這裏做什麼。你說它有效(Session [「data」]包含TextBox1的文本?),但你沒有看到任何改變?你期望什麼改變?請給我們一些關於這部分問題的更多信息:

由於TextBox1的內容可能被更改,所以這些更改尚未顯示。

謝謝。

更新: 嘗試清除或刪除會話,然後重新填充它。

Session.Remove("data"); 
Session.Clear(); 
+0

由於page2.aspx中有返回按鈕,它們重定向到page1.aspx.Now,當用戶返回page1.aspx時,他可以修改Textbox1的內容,現在將Textbox1的已更改文本保存在會話[「data」]中,該會話將進一步使用。問題是,Session變量中的更改未反映出來。 –

+0

更新回答,希望有所幫助。 –

0

閱讀此我想Respone.Redirect可能會導致你失去你的會話數據

Don't redirect after setting a Session variable (or do it right)

我見一遍又一遍在ASP.NET論壇的問題是 以下內容:在登錄頁面中,如果用戶和密碼已驗證 ,則頁面開發人員想要重定向到默認頁面。 要做到這一點,他寫道下面的代碼:

Session["Login"] = true;

Response.Redirect("~/default.aspx");

好了,這是行不通的。你能看到爲什麼 ?是的,這是因爲重定向和會話變量 的工作方式。在創建新會話時(即,第一次將 寫入Session變量),ASP.NET會在包含會話令牌的客戶端 上設置易失性cookie。在所有後續請求中,如果服務器會話和客戶端cookie尚未過期,則 ASP.NET可以查看此cookie並找到正確的會話。現在,重定向所做的是向客戶端發送一個特殊標題,以便 向服務器請求與正在等待的頁面不同的頁面。 服務器端,在發送此頭後,重定向結束響應。 這是一件非常暴力的事情。 Response.End實際上停止了 頁面的執行,無論它使用的是ThreadAbortException。 這裏真正發生的是會話令牌在 戰鬥中迷失。有幾件事你可以做,以解決這個問題。 首先,在表單身份驗證的情況下,我們已經提供了一個 特殊的重定向方法:FormsAuthentication.RedirectFromLoginPage。 這種方法非常好,因爲它工作正常,並且因爲它將 返回到他首先要求的頁面,並且 並不總是默認的。這意味着用戶可以在網站上爲受保護的 頁面添加書籤等等。你可以做的另一件事是使用 重定向的重載版本:

Response.Redirect("~/default.aspx", false);

這不會中止 線程,從而節省了會話令牌。實際上,這個過載是RedirectFromLoginPage內部使用的 。事實上,I 會建議您始終使用此重載版本而不是其他版本,以避免異常的不良影響。非超載的 版本實際上在此保持語法上與經典的 ASP兼容。

+0

即使這不適合我。 –