禁用ViewState
ViewState 是什麼?
1 ViewState 用來跟蹤和保存控件的狀態信息。否則這些信息可能會丟失,原因可能是這些值不隨著 form 回
發,或者根本就不在 page 的 html 中。
2 ViewState 中保存著代碼中改變的控件屬性,通過代碼綁定到控件的任何數據,以及由用戶操作觸發,回發的
任何更改。
3 ViewState 還提供了一個狀態包(StateBag), 這是一個特殊的集合或字典(collection or dictionary), 可以
用來保存,通過一個 key 來恢複任意的對象或者值。
ViewState 的格式
1 保存在表單中的 __VIEWSTATE 隱藏字段。是 Base64 編碼過的,而不是加密!
2 但要加密也是可以的(設置 enableViewStateMac 來使用 machine key 進行 hash)
3 加密:設置 machineKey 驗證, 但這必須在機器級別設置,需要更多的資源,所以不推薦。
ViewState 的一個小用法
像session.是會話級別的.隻要會話沒有過期.session中存的數據就在.viewstate是頁麵級別的.隻要這個頁麵
在.viewstate中存的數據就在.就是說viewstate中存的數據隻能在聲明該變量的頁麵中使用.
比如在某頁的page_load中聲明了:ViewState["test"]="aaa";那麼在該頁中的任何一個方法中都可以使用
ViewState["test"]來直接得到值"aaa".
什麼情況下可以禁用ViewState?
我們知道,asp.net默認情況下是啟用viewState的,這樣會在頁麵中生成冗長的隱藏字段。
ViewState對於需要postback操作的頁麵才有用(即產生交互的頁麵)!
那麼對於隻需要展示的頁麵,完全沒有必要使用viewstate!
禁用方式
1 頁麵整體禁用:頂部的Page中EnableViewState=false
2 指定控件禁用:控件中EnableViewState=false
注意點
需要我們注意的是,我們禁用了頁麵的ViewState以後,並沒有完全去掉頁麵的ViewState,但頁麵的ViewState的長度會小很多。
如果要求頁麵完全不存在ViewState,則不能出現ruant=server的form。
如果Button沒有放到<form ruant="server"></form>中,則這個按鈕時不可用的!
部分內容參考子《你必須知道的.NET》
最後更新:2017-04-02 22:16:08