MSDN:
定義 ASP.NET 伺服器控制項為處理回傳事件而必須實現的方法。
命名空間:System.Web.UI
程式集:System.Web(在 system.web.dll 中)
文法:
public interface IPostBackEventHandler
公用方法:
RaisePostBackEvent:當由類實現時,使伺服器控制項能夠處理將表單發送到伺服器時引發的事件。(要觸發的事件都寫在該方法中)
引言:我們經常發現,將一個Button按鈕拖到aspx頁面中,然後設定一下OnClick屬性(onClick="Button1_Click"),瀏覽頁面時,單擊Button,AutoPostBack,並且執行了後台代碼:Button1_Click。當然不只是Button,其他諸如LinkButton、TextBox等都會AutoPostBack處理相應事件,這是為什嗎?我們可以自己做出一個控制項也能實現AutoPostBack並且處理自己的事件嗎?
我們可以看看Button類是怎麼實現的:
public class Button : WebControl, IButtonControl, IPostBackEventHandler
看到了吧,IPostBackEventHandler介面,正是實現了這個介面才使得Button擁有了回傳的功能,IPostBackEventHandler使我們看到了希望與曙光。
IPostBackEventHandler介面中有一個方法:void RaisePostBackEvent ( string eventArgument),eventArgument 表示要傳遞到事件處理常式的可選事件參數的 String。
msdn對於RaisePostBackEvent 的解釋是:
該頁將 eventArgument 參數的值傳遞給實現 IPostBackEventHandler介面的控制項的 RaisePostBackEvent 方法。此控制項還會呈現導致發生回傳的 HTML 元素。如果控制項呈現了用於回傳的用戶端指令碼,則會在 eventArgument 參數中傳遞指令碼中的參數。如果回傳是由簡單提交操作所引起的,則 eventArgument 參數為 Null 參考(在 Visual Basic 中為 Nothing)。
此方法為 HTML 和 Web 伺服器控制項實現的許多事件提供功能。
看看我的例子吧,會讓你豁然開朗的。
自訂控制項
namespace MyPostBackControlSet{ public class MyPostBackControl : Control, IPostBackEventHandler { //申明Click事件委託 public event EventHandler Click; public MyPostBackControl() { // // TODO: Add constructor logic here // } //實現RaisePostBackEvent方法,處理回傳事件 public void RaisePostBackEvent(string eventArgument) { OnClick(this, EventArgs.Empty); } //定義OnClick事件處理常式 protected void OnClick(Object sender, EventArgs e) { if (Click != null) { Click(this, e); } } protected override void Render(HtmlTextWriter writer) { writer.Write("<input type='submit' name='" + this.UniqueID + "' value='回傳'/>"); } }}
頁面調用代碼
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="NewFolder1_Default3" %><%@ Register Namespace="MyPostBackControlSet" TagPrefix="U1" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>Untitled Page</title></head><body> <form id="form1" runat="server"> <div> <U1:MyPostBackControl ID="MyPostBackControl1" runat="server" ></U1:MyPostBackControl> </div> </form></body></html>
頁面效果:
點擊按鈕:
分析:
1、程式實現了IPostBackEventHandler介面,實現了RaisePostBackEvent函數.
2、回傳時,系統便會調用RaisePostBackEvent中的內容.
3、執行自己的事件:執行自己寫的OnClick方法。
綜上:我們可以通過實現IPostBackEventHandler介面,處理伺服器控制項的回傳事件。