以「信客」隱喻 ASP.NET PostBack 機制:瀏覽器發起 HTTP POST (信客送信) → 伺服器識別觸發控件 (UniqueID) → 呼叫 IPostBackEventHandler.RaisePostBackEvent (口信) → 觸發控件事件 (委派/回調)。本文深度剖析此流程與自訂控件實作。
IPostBackEventHandler 的控件 (Button, LinkButton 等)。RaisePostBackEvent(string eventArgument) 接收客戶端傳回參數。public event EventHandler Click; protected virtual void OnClick(EventArgs e)。using System;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Essay
{
public class MyButton : WebControl, IPostBackEventHandler
{
// 屬性存 ViewState
public virtual string Text
{
get => (string)ViewState["Text"] ?? string.Empty;
set => ViewState["Text"] = value;
}
// 渲染含 UniqueID 的 submit 按鈕
protected override void Render(HtmlTextWriter writer)
{
writer.Write($"");
}
// 事件定義
public event EventHandler Click;
// IPostBackEventHandler 實作:將 PostBack 映射為 Click 事件
void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)
{
OnClick(EventArgs.Empty);
}
protected virtual void OnClick(EventArgs e)
{
Click?.Invoke(this, e);
}
}
}
HTTP POST (含 __EVENTTARGET=控件UniqueID)
↓
Page.LoadPostData (載入表單值)
↓
Page.RaisePostBackEvent (依 __EVENTTARGET 找控件 → 呼叫 RaisePostBackEvent)
↓
控件.OnClick → 觸發 Click 事件 → 執行使用者處理器
↓
Page.PreRender → Render → Response
理解此流程,才能掌控複雜 PostBack 場景、自訂控件開發、AJAX 部分更新原理。