ASP.NET用戶控件一般適用于產生相對靜態的內容,所以沒有builtin的事件支持。本文討論用戶控件返回事件的方法。
假定用戶控件(UserControl.ascx)中包含按鈕控件AButton,希望實現按AButton按鈕時,包含該用戶控件的頁面可以接收到事件。為此,小雞射手在用戶控件和頁面的代碼中分別作了處理。
UserControl.ascx.cs中的處理:
1. 定義public的事件委托,如ClickEventHandler;
2. 在UserControl類中聲明事件,如Click;
3. 在UserControl類中定義引發事件的方法,如OnClick()方法;
4. 在UserControl類的相關方法中調用引發事件的方法,如在Button_Click()中調用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的頁面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
}
總結一下,其實就是將事件機制利用手工編程的方法加進去:加入一般控件IDE自動生成的代碼。順便說一下,C#的事件機制實現了Obeserver pattern,除了UI還可以用于業務層,能有效地降低對象間的耦合度,像UserControl那樣,根本無需知道包含它的頁面對象是誰!
您可能感興趣的文章:- asp.net自定義控件代碼學習筆記
- asp.net 自定義控件實現無刷新上傳圖片,立即顯示縮略圖,保存圖片縮略圖
- Asp.net 動態加載用戶自定義控件,并轉換成HTML代碼
- asp.net DropDownList自定義控件,讓你的分類更清晰
- 關于asp.net 自定義分頁控件
- ASP.NET單選按鈕控件RadioButton常用屬性和方法介紹
- ASP.NET中 CheckBox復選框控件的使用
- ASP.NET中CheckBoxList復選框列表控件詳細使用方法
- ASP.NET中 RadioButtonList 單選按鈕組控件的使用方法
- Asp.net自定義控件之單選、多選控件