ASP.NET 控制項的開發人員利用 ViewState 和控制項狀態來保持瀏覽器發出的各 請求之間的狀態資訊。通常,該資訊作為由頁面呈現的 HTML 標籤中的隱藏欄位 傳送給用戶端。然後,該頁面狀態作為下一個表單提交的一部分傳回伺服器並還 原給控制項或頁面。即使瀏覽器使用 HTTP 協議(該協議定義為無狀態),但利用臨 時儲存狀態資訊的功能,控制項的開發人員能夠輕鬆地提供更豐富的應用程式體驗 。
ASP.NET 2.0 允許您修改臨時保持頁面狀態的位置和方式。在某些情況下, 避免在用戶端與伺服器之間往返傳送資料可能更為可取。ASP.NET 2.0 提供的兩 個頁面狀態持續程式分別是 HiddenFieldPageState 持續程式(我們已提到過)和 SessionPageStatePersister。SessionPageStatePersister 利用與瀏覽器會話 相關的伺服器會話儲存資料。使用 SessionPageStatePersister 有正反兩個方 面。對於發送到(自)瀏覽器的頁面而言,使用會話(而非隱藏欄位)可以避免其大 小的增加。在許多情況中,頁面狀態是全部標記的一個重要部分。然而,在會話 中儲存資料將佔用寶貴的伺服器資源。此外,隱藏欄位不像會話那樣具有相關的 逾時。您可以配置一個應用程式,以便將會話保持到後端資料庫,並避免將負載 直接加到 Web 服務器。這也將擴充至 Web 場方案。
要使用除預設持續程式之外的持續程式,需要重寫該頁的 PageStatePersister 屬性,並返回另一個持續程式的一個執行個體。首先,下面的 一個簡單頁面只使用大量數字填充一個 ArrayList,然後將它綁定到一個 GridView 控制項。
以下是引用片段:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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(Convert.ToString(i));
}
GridView1.DataSource = list;
GridView1.DataBind();
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Untitled Page</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>