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

ASP.NET 2.0 頁面狀態持久化機制深度解析

     編輯:關於ASP.NET

前言:HTTP 無狀態與狀態管理的必要性

ASP.NET 控制項開發人員長期依賴 ViewState 與 控制項狀態 來跨請求保持狀態資訊。預設情況下,這些資料會序列化為 Base64 編碼字串,以隱藏欄位形式嵌入頁面 HTML 中,隨表單回傳至伺服器再還原。雖然 HTTP 協定本質上是無狀態的,但這項機制讓開發者能輕鬆構建豐富的互動體驗。

ASP.NET 2.0 的彈性擴充:自訂頁面狀態持久化器

ASP.NET 2.0 開放了頁面狀態儲存位置與方式的自訂能力。若想避免在用戶端與伺服器間來回傳遞大量資料,可改用伺服器端 Session 儲存。框架內建兩種持久化器:

  • HiddenFieldPageStatePersister(預設):維持原有隱藏欄位模式。
  • SessionPageStatePersister:將狀態存放於伺服器 Session 中,減輕用戶端負擔,但會佔用伺服器資源,且受 Session 逾時限制。

選擇時需權衡:隱藏欄位不佔伺服器記憶體,但會增加頁面體積;Session 雖能精簡頁面,卻需考慮擴展性(可搭配 SQL Server Session State 實現 Web Farm 架構)。

實作範例:改用 SessionPageStatePersister

只需在頁面類別中覆寫 PageStatePersister 屬性,回傳 SessionPageStatePersister 實例即可。下列程式碼示範一個包含大量資料繫結 GridView 的頁面,採用 Session 儲存 ViewState:

<%@ Page Language="C#" %>
<script runat="server">
protected override PageStatePersister PageStatePersister {
    get { return new SessionPageStatePersister(this); }
}
protected override void OnLoad(EventArgs e) {
    base.OnLoad(e);
    if (!IsPostBack) {
        ArrayList list = new ArrayList();
        for (int i = 0; i < 1000; i++) list.Add(i.ToString());
        GridView1.DataSource = list;
        GridView1.DataBind();
    }
}
</script>
<html xmlns="https://www.w3.org/1999/xhtml">
<head runat="server"><title>Session ViewState Demo</title></head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Submit" />
</div></form></body></html>

此範例將 1000 筆資料繫結至 GridView,若使用預設隱藏欄位,頁面大小將顯著膨脹;改用 Session 持久化後,HTML 體積大幅縮減,提升傳輸效能。

總結與建議

ASP.NET 2.0 的頁面狀態持久化架構採用 Provider 模式,開發者可依據應用場景(如行動裝置頻寬限制、Web Farm 部署需求)靈活切換或自行實作 PageStatePersister 衍生類別,實現最佳化的狀態管理策略。

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