淺談ASP.NET中最簡(jiǎn)單的自定義控件

字號(hào):


    這篇文章主要簡(jiǎn)單介紹了ASP.NET中最簡(jiǎn)單的自定義控件,以及核心代碼示例,需要的朋友可以參考下
    ASP.NET用戶控件一般適用于產(chǎn)生相對(duì)靜態(tài)的內(nèi)容,所以沒(méi)有builtin的事件支持。本文討論用戶控件返回事件的方法。
    假定用戶控件(UserControl.ascx)中包含按鈕控件AButton,希望實(shí)現(xiàn)按AButton按鈕時(shí),包含該用戶控件的頁(yè)面可以接收到事件。為此,小雞射手在用戶控件和頁(yè)面的代碼中分別作了處理。
    UserControl.ascx.cs中的處理:
    1. 定義public的事件委托,如ClickEventHandler;
    2. 在UserControl類中聲明事件,如Click;
    3. 在UserControl類中定義引發(fā)事件的方法,如OnClick()方法;
    4. 在UserControl類的相關(guān)方法中調(diào)用引發(fā)事件的方法,如在Button_Click()中調(diào)用OnClick()。
    核心代碼示意如下:
    代碼如下:
    public delegate void ClickEventHandler(object sender, EventArgs e);
    public class MyUserControl : System.Web.UI.UserControl
    {
    protected System.Web.UI.WebControls.Button AButton;
    public event ClickEventHandler Click;
    protected void OnClick(EventArgs e)
    {
    if (Click!=null) Click(this, e);
    }
    private void AButton_Click(object sender, System.EventArgs e)
    {
    this.OnClick(e);
    }
    }
    包含UserControl的頁(yè)面cs文件中的處理:
    1. InitializeComponent()中增加事件處理程序,采用FindControl方法找到UserControl;
    2. 定義事件處理方法,在該方法中處理UserControl的事件,如UserControl_Clicked()。
    核心代碼示意如下:
    代碼如下:
    private void InitializeComponent()
    {
    this.Load += new System.EventHandler(this.Page_Load);
    MyUserControl uc = this.FindControl("myUserControlID") as MyUserControl;
    uc.Click += new ClickEventHandler(this.UserControl_Clicked);
    }
    private void UserControl_Clicked(object sender, System.EventArgs e)
    {
    // UserControl_Clicked event hanlder
    }
    總結(jié)一下,其實(shí)就是將事件機(jī)制利用手工編程的方法加進(jìn)去:加入一般控件IDE自動(dòng)生成的代碼。順便說(shuō)一下,C#的事件機(jī)制實(shí)現(xiàn)了Obeserver pattern,除了UI還可以用于業(yè)務(wù)層,能有效地降低對(duì)象間的耦合度,像UserControl那樣,根本無(wú)需知道包含它的頁(yè)面對(duì)象是誰(shuí)!