程序中保存狀態的方式有以下幾種:
1、Application 2、Cookie 3、Session
4、ViewState:ViewState是保存狀態的方式之一,ViewState實際就是一個Hidden字段,但是它是服務器控件狀態保存的基礎如下代碼
1 <form method="post" action="./pay.aspx" id="form1"> 2 <div class="aspNetHidden"> 3 <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJODIzOTMwMDc3ZGTbIE1Qcr6O1MaNJf5bvD8Tp0AKJJg+NyIEBAajmcsw1g==" /> 4 </div> 5 6 <div class="aspNetHidden"> 7 8 <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="5202EDA5" /> 9 <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEdAAZXxRmso2FJZVL8LCmbbTgwoTATQtF3V7tpU4YYc7cSY5Q9qbaazGdyvfKTQztyQsoEK/deKjVeubuclCDQacXyqVnJ9g9La52g6r1ve+rc/JOs/XAYrHuElaDr6LBkOxGa3O7hMB7G//QtMFx5OwoF4J8cn3f8fns8a+xdJYVbcg==" /> 10 </div> 11 </form>
這就是一段ViewState保存的頁面代碼,為了處理頁面上復雜的功能,常常會加很多hidden,然后后台服務器端在通過id根據接收到的值來判斷頁面的狀態。
類似這種就可以用ViewState方式實現。ViewState是一種比較好的保存數據方式。
ViewState賦值:ViewState["id"] = '123';
ViewState取值:string bbid = ViewState["id"].ToString();
ViewState和session的不同之處
(1) session值是保存在服務器內存上,那么,可以肯定,大量的使用session將導致服務器負擔加重. 而viewstate由於只是將數據存入到頁面隱藏控件里,不再占用服務器資源,因此, 我們可以將一些需要服務器"記住"的變量和對象保存到viewstate里面. 而sesson則只應該應用在需要跨頁面且與每個訪問用戶相關的變量和對象存儲上.
(2) session在默認情況下20分鍾就過期,而viewstate則永遠不會過期.
但viewstate並不是能存儲所有的.net類型數據,它僅僅支持String、Integer、Boolean、Array、ArrayList、Hashtable 以及自定義的一些類型.
ViewState的優點:存放在客戶端會減輕服務器的負擔。
建議不要存放比較機密的信息,因為ViewState要保存在客戶端,天生就有安全性的隱患。
如有什么地方講的不正確,請指正謝謝!