首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET 2.0 ViewState 持久化機制深度解析:HiddenFieldPageStatePersister 與 SessionPageStatePersister

     編輯:關於ASP.NET

ViewState 預設儲存於頁面隱藏欄位 __VIEWSTATE,內容為 Base64 編碼字串。ASP.NET 2.0 重構持久化架構,引入 PageStatePersister 抽象類別,提供兩種內建實作:

  • HiddenFieldPageStatePersister(預設):維持舊有隱藏欄位機制。
  • SessionPageStatePersister:將 ViewState 儲存在伺服器 Session 中,大幅減少頁面傳輸大小,適合頻寬受限的行動裝置。

切換至 Session 持久化

僅需覆寫頁面的 PageStatePersister 屬性:

protected override PageStatePersister PageStatePersister
{
  get { return new SessionPageStatePersister(this); }
}

對比 ASP.NET 1.1 需同時覆寫 SavePageStateToPersistenceMedium 與 LoadPageStateFromPersistenceMedium 兩個方法,2.0 架構更簡潔。

自訂持久化:擴充 PageStatePersister

若需支援特殊客戶端(如不支援隱藏欄位、Cookie 的舊裝置),可繼承 PageStatePersister 並實作:

  • Save():將 ViewState 與 ControlState 序列化至持久媒介(資料庫、檔案、Cache 等)。
  • Load():從媒介還原狀態物件。
  • 透過 StateFormatter 屬性(IStateFormatter)處理物件序列化/反序列化為 Base64 字串。

配合 頁面配接器,可根據瀏覽器類型動態選擇持久化策略(如桌面瀏覽器用 HiddenField,行動裝置用 Session)。

核心類別關係圖

Page
  └─ PageStatePersister (abstract)
        ├─ HiddenFieldPageStatePersister (default)
        ├─ SessionPageStatePersister
        └─ CustomPageStatePersister (your implementation)
  └─ IStateFormatter (via StateFormatter property)
        └─ ObjectStateFormatter (default, efficient Base64 serialization)

效能與權衡

策略優點缺點適用場景
HiddenField (預設)無伺服器狀態、支援 Web Farm增加頁面大小、頻寬消耗一般網頁、ViewState 適中
Session頁面精簡、頻寬節省佔用伺服器記憶體、Web Farm 需共享 Session行動裝置、大量 ViewState 頁面
自訂 (DB/Cache)彈性最高、可跨伺服器共享開發複雜、延遲較高特殊需求、超大型 ViewState

理解 ViewState 持久化機制,能針對專案特性選擇最佳策略,平衡頻寬、記憶體與開發成本。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved