繼渲染管線後,本文聚焦控件的事件處理機制。ASP.NET Web 控件(如 Button、LinkButton、ImageButton)之所以能觸發伺服器端 Click 事件,關鍵在於它們實作了 IPostBackEventHandler 介面。
UniqueID 作為 __EVENTTARGET。__EVENTTARGET 找到目標控件。IPostBackEventHandler,執行階段呼叫其 RaisePostBackEvent(string eventArgument) 方法。Click),進而執行使用者訂閱的事件處理常式。public class SuperButton : Control, IPostBackEventHandler
{
// 1. 定義事件
public event EventHandler Click;
// 2. 引發事件的保護方法
protected virtual void OnClick(EventArgs e)
{
Click?.Invoke(this, e);
}
// 3. 實作介面方法:處理回傳
public void RaisePostBackEvent(string eventArgument)
{
OnClick(EventArgs.Empty);
}
// 4. 渲染:輸出帶有 name=UniqueID 的 submit 按鈕
protected override void Render(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Type, "submit");
writer.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID);
writer.AddAttribute(HtmlTextWriterAttribute.Value, "確定");
writer.RenderBeginTag(HtmlTextWriterTag.Input);
writer.RenderEndTag();
}
}
RaisePostBackEvent。若控件需接收用戶輸入值(如 TextBox),還需實作 IPostBackDataHandler,包含 LoadPostData(讀取表單值)與 RaisePostDataChangedEvent(值變更時引發事件)。這將在後續文章詳細介紹。