本系列終篇聚焦兩大核心主題:如何實作 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 標籤輸出使用者名稱、密碼輸入框與登入按鈕
}
}
RegisterRequiresControlState 與 SaveControlState/LoadControlState 實作。作者分享寫作過程中瀏覽器崩潰導致重寫的經驗,提醒開發者勤存檔、用版本控管。