程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET狀態管理之十一(視圖狀態ViewState)

ASP.NET狀態管理之十一(視圖狀態ViewState)

編輯:關於ASP.NET

視圖狀態是 ASP.NET 頁框架默認情況下用於保存往返過程之間的頁和控件值的方法。當呈現頁的 HTML 形式時,需要在回發過程中保留的頁的當前狀態和值將被序列化為 Base64 編碼的字符串,並輸出到視圖狀態的隱藏字段中。

視圖狀態是 ASP.NET 頁中的儲存庫,可以存儲需要在回發過程中保留的值。例如,您可以將信息存儲在視圖狀態中,下次將頁面發送到服務器時,將會在頁加載事件過程中訪問這些信息。

您可以使用頁的 ViewState 屬性(此屬性公開一個字典對象)來訪問視圖狀態信息。由於視圖狀態數據以字符串的形式存儲,因此只能存儲可以序列化的對象。

視圖狀態數據以 Base64 編碼字符串的格式存儲在一個或多個隱藏字段中。您可以使用頁的 ViewState 屬性(此屬性公開一個字典對象)來訪問視圖狀態信息。由於視圖狀態數據以字符串的形式存儲,因此只能存儲可以序列化的對象。

由於視圖狀態是作為隱藏字段發送的,因此直到發生 PreRenderComplete 事件之前,都可以對視圖狀態進行更改。一旦將頁呈現到浏覽器,便無法保存對視圖狀態的更改。

如果查看頁輸出源,則可以看到隱藏視圖狀態字段中的信息,這可能產生安全性問題。若要緩解該問題,可以通過將 @ Page 指令中的 viewStateEncryptionMode 屬性設置為“Always”來加密視圖狀態。

注意

若要使用 ViewState 屬性,ASP.NET 網頁必須包含具有 runat="server" 屬性的窗體元素。

可以存儲在視圖狀態中的數據類型

您可以將下列類型的對象存儲到視圖狀態中:

字符串

整數

布爾值

Array 對象

ArrayList 對象

哈希表

自定義類型轉換器(請參見 TypeConverter 類)

您也可以存儲其他類型的數據,但是必須使用 Serializable 屬性編譯該類,這樣視圖狀態便可以將這些數據序列化為 XML。

使用視圖狀態的注意事項

視圖狀態提供了特定 ASP.NET 頁的狀態信息。如果需要在多個頁上使用信息,或者如果需要在訪問網站時保留信息,則應當使用另一個方法(如應用程序狀態、會話狀態或個性化設置)來維護狀態。

視圖狀態信息將序列化為 XML,然後使用 Base64 編碼進行編碼,這將生成大量的數據。將頁回發到服務器時,視圖狀態的內容將作為頁回發信息的一部分發送。如果視圖狀態包含大量信息,則會影響頁的性能。

另一個重要的考慮因素是,如果隱藏字段中的數據量過大,某些代理和防火牆將禁止訪問包含這些數據的頁。由於最大數量會隨所采用的防火牆和代理的不同而不同,因此大量隱藏字段可能會導致偶發性問題。為了幫助避免這一問題,如果 ViewState 屬性中存儲的數據量超過了頁的 MaxPageStateFieldLength 屬性中指定的值,該頁會將視圖狀態拆分為多個隱藏字段,以將每個單獨字段的大小減少到防火牆拒絕的大小以下。

某些移動設備根本不允許使用隱藏字段。因此,視圖狀態對於這些設備無效。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved