Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Windows 綜合教學 >> 關於 Windows

ASP.NET ViewState 實作原理與程式碼解析

編輯:關於 Windows

ViewState 是 ASP.NET 提供的頁面狀態保持機制,本質為隱藏欄位 __VIEWSTATE,儲存經 Base64 編碼的序列化狀態資料。本文從內部實作角度解析 ViewState 原理。

傳統 Web 狀態管理方式

  • Application:全域共享,多執行緒需鎖定 (Application.Lock/Unlock)。
  • Session:支援 InProc、SQL Server、State Server 三種儲存模式,由 StateApplication 輔助進程管理。
  • Cookie:客戶端儲存,依賴瀏覽器支援。

ViewState 運作機制

伺服器控制項透過 SaveViewState / LoadViewState 將狀態序列化為 Base64 字串寫入 __VIEWSTATE 隱藏欄位,PostBack 時自動還原。開發者可透過 Request.Params["__VIEWSTATE"] 取得原始值,並用 Convert.FromBase64String 解碼查看內容。

範例程式碼

<%@ Page language="c#" Codebehind="ViewStateTest.aspx.cs" AutoEventWireup="false" Inherits="CsdnTest.ViewStateTest" %>
<html><body>
<form id="ViewStateTest" method="post" runat="server">
<asp:Button ID="btnPostBack" Runat="server" Text="Post Back" />
<br/>
<asp:CheckBox ID="chkTest" Runat="server" Text="This is a check box" />
</form></body></html>
private void btnPostBack_Click(object sender, System.EventArgs e)
{
    // [1] 直接輸出 ViewState 原始值
    Response.Write("ViewState :" + Request.Params["__VIEWSTATE"] + "<br/>");

    // [2] Base64 解碼查看內容
    string decodeValue = Encoding.UTF8.GetString(Convert.FromBase64String(Request.Params["__VIEWSTATE"]));
    // 進一步解析...
}

透過解碼可觀察 ViewState 內部結構,理解控制項狀態如何跨請求保持。

Copyright © Windows教程網 All Rights Reserved