共用方式為


維護控制項的狀態

ASP.NET 伺服器控制項會從 Control 繼承名為 ViewState 的屬性,使它可以輕易地參與狀態管理。ViewState 的型別是 System.Web.UI.StateBag,它是一個儲存名稱/值配對的字典。ViewState 是由 ASP.NET 網頁架構保存為字串變數,並傳送給用戶端且返回成一個隱藏變數。當回傳時,網頁架構會剖析隱藏變數中的輸入字串,並填入 (Populate) 每一個控制項的 ViewState 屬性。當控制項使用 ViewState 而不使用私用欄位作為屬性資料時,即會自動保存在用戶端往返時的屬性 (如果屬性未保存於 ViewState,實務上應該在回傳時傳回它的預設值)。

下列的程式碼片段將說明儲存於 ViewState 的屬性。

public String Text {
          get {
              return (String) ViewState["Text"];
          }
          set {
              ViewState["Text"] = value;
          }
       }
[Visual Basic]
Public Property Text() As String
   Get
      Return CType(ViewState("Text"), String)
   End Get
   Set
      ViewState("Text") = value
   End Set
End Property

如需使用 ViewState 以儲存屬性的範例,請參閱 ASP.NET 快速入門 -> ASP.NET Web Form -> 撰寫自訂的控制項。

注意 ViewState 通常是用於保存網頁往返時的表單資料。請不要使用 ViewState 來儲存密碼、連接字串和檔案路徑之類的資訊。如需在網頁間共享資料和永續性儲存體 (Persistent Storage) 的詳細資訊,請參閱 ASP.NET 狀態管理

可以保存於 ViewState 的型別

可序列化或已定義為 TypeConverter 的型別都可以保存於 ViewState。然而,只可序列化的型別和具有 TypeConverter 的型別相比則較慢且會產生一個很大的 ViewStateViewState 是使用有限制的物件序列化 (Serialization) 格式來序列化,這種格式已為基本型別以及 StringArrayListHashTable 型別最佳化。

ViewState 和效能

控制項開發人員應該注意 ViewState 中的任何資料會自動在用戶端往返。因為往返會導致效能損耗,所以在使用 ViewState 時必須仔細考慮。當有數個屬性和通用資料相依時,您可以只保存 ViewState 的索引鍵項目以最佳化效能。控制項從 Control 繼承名為 EnableViewState 的屬性,可以允許控制項的消費者啟用或停用它的 ViewState 保存性 (Persistence)。

使用 ViewState 自訂狀態還原

為增進效能,或儲存 ViewState 預設為無法儲存的自訂型別,控制項可以自訂 ViewState 中屬性資料的儲存方式。當控制項自訂屬性資料的儲存區時,控制項也必須提供自訂實作以從 ViewState 中儲存的資料來還原屬性值。為此基底類別 Control 提供了兩個方法,SaveViewStateLoadViewState。這些方法具有下列的簽名碼。

protected virtual object SaveViewState();
protected virtual void LoadViewState(object savedState);
[Visual Basic]
Overridable Protected Function SaveViewState() As Object
Overridable Protected Sub LoadViewState(ByVal savedState As Object)

如需覆寫 SaveViewStateLoadViewState 的範例,請參閱樣板化的資料繫結控制項範例

請參閱

ASP.NET 狀態管理 | 工作階段狀態 | 應用程式狀態