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

ASP.NET 內部機制深度解析(八):自訂型別轉換器與 ControlState 實作

     編輯:關於ASP.NET

本系列終篇聚焦兩大核心主題:如何實作 TypeConverter 讓自訂類別能在 ViewState 中正確序列化/反序列化,以及 ControlState 的運作原理與實作細節。文中提供完整程式碼範例,示範從 WebControl 繼承打造自訂登入控制項 MyLogin,並透過 ViewState 保存 UserName、UserPassword 等屬性。

關鍵程式碼架構

public class MyLogin : WebControl
{
    public string UserName
    {
        get { return ViewState["UserName"] != null ? (string)ViewState["UserName"] : "UserName"; }
        set { ViewState["UserName"] = value; }
    }
    public string UserPassword
    {
        get { return ViewState["UserPassword"] != null ? (string)ViewState["UserPassword"] : "UserPassword"; }
        set { ViewState["UserPassword"] = value; }
    }

    protected override HtmlTextWriterTag TagKey => HtmlTextWriterTag.Table;

    protected override void RenderContents(HtmlTextWriter writer)
    {
        // 以 Table/Tr/Td/Input 標籤輸出使用者名稱、密碼輸入框與登入按鈕
    }
}

核心觀念補充

  • TypeConverter:讓非基本型別(如自訂類別、結構)能在 ViewState 字串化儲存時正確轉換。
  • ControlState:即使頁面停用 ViewState,控制項仍能保存關鍵狀態(如 GridView 分頁索引),透過 RegisterRequiresControlState 與 SaveControlState/LoadControlState 實作。
  • IStateManager:ViewState 內部儲存的物件需實作此介面,才能參與狀態追蹤與序列化。

作者分享寫作過程中瀏覽器崩潰導致重寫的經驗,提醒開發者勤存檔、用版本控管。

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