服務(wù)熱線
153 8323 9821
什么是ViewState?
對于ViewState,我們有許多的誤解。Viewstate不保存控件,而是去保存form中對應(yīng)ID控件的值,特別是那些由于他們沒有和form一起post 而在頁面回傳時會丟失的控件的值。viewstate一般不要用來保存session或在頁面間傳輸數(shù)據(jù)。在頁面回傳后,viewstate不能用來動態(tài)地創(chuàng)建頁面的控件。他在頁面回傳之后不回復(fù)控件的值。甚至一個控件的viewstate被禁止了,在頁面回傳后,控件的值仍然不會丟失,比如textbox,dropdownlist控件。那什么是viewstate呢?viewstate保存最后一次在服務(wù)器上處理的頁面狀態(tài)。他不能保存那些被動態(tài)改變的控件的值。
viewstate是如何工作的?
所有的服務(wù)器端控件都有一個ViewState屬性。如果他是enable的,這個控件的viewstate就起作用了。那viewstate是在哪里,是如何存儲的呢?當(dāng)一個頁面第一次加載,所有的控件被序列化到viewstate,保存在一個叫_ViewState的隱藏form字段里。這個隱藏字段對應(yīng)服務(wù)器端的ViewState對象。頁面的ViewState使用System.Web.UI.StateBag對象存儲鍵值對。當(dāng)一個回傳發(fā)生,頁面反序列化ViewState然后恢復(fù)所有的控件。頁面中保存控件的ViewState以base 64 編碼格式存儲成name - value。當(dāng)一個頁面重新加載,會調(diào)用兩個和ViewState相關(guān)的方法, LoadViewState 和SaveViewState。下面是我的一個頁面中的_ViewState隱藏字段。
<input 啟用和禁止ViewState
在默認(rèn)情況下,所有服務(wù)器控件的viewstate開啟狀態(tài),通過以及幾種途徑來禁止。
1.頁面級別
2.控件級別
3.應(yīng)用程序級別
4.機(jī)器級別
頁面級別禁止的方法是在頁面的開始寫入
<%@
or
<%@ 控件級別是
<asp:TextBox
or
<asp:TextBox 程序級別是在web.config中