閱讀104 返回首頁    go 阿裏雲 go 技術社區[雲棲]


禁用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

  上一篇:go ASP.NET中加密與解密QueryString的方法
  下一篇:go Sql Server使用存儲過程