首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET 最簡單的自訂使用者控件與事件傳遞實作

     編輯:關於ASP.NET

ASP.NET 使用者控件 (.ascx) 預設不支援事件直接向包含頁面傳遞。本文示範如何透過自訂委派與事件,實現控件內部按鈕點擊觸發頁面端處理邏輯。

使用者控件端 (UserControl.ascx.cs)

public delegate void ClickEventHandler(object sender, EventArgs e);

public partial class MyUserControl : System.Web.UI.UserControl
{
    protected System.Web.UI.WebControls.Button AButton;

    // 1. 宣告公開事件
    public event ClickEventHandler Click;

    // 2. 定義引發事件的保護方法
    protected virtual void OnClick(EventArgs e)
    {
        Click?.Invoke(this, e);  // C# 6.0+ null 條件運算子
    }

    // 3. 內部按鈕點擊事件處理
    protected void AButton_Click(object sender, EventArgs e)
    {
        OnClick(e);  // 引發自訂事件
    }
}

包含頁面端 (Page.aspx.cs)

public partial class MyPage : System.Web.UI.Page
{
    protected void Page_Init(object sender, EventArgs e)
    {
        // 1. 透過 FindControl 取得控件實例
        MyUserControl uc = this.FindControl("myUserControlID") as MyUserControl;
        if (uc != null)
        {
            // 2. 訂閱控件事件
            uc.Click += new ClickEventHandler(UserControl_Clicked);
        }
    }

    // 3. 事件處理方法
    private void UserControl_Clicked(object sender, EventArgs e)
    {
        // 處理來自使用者控件的點擊邏輯
        lblMessage.Text = "收到 UserControl 傳來的事件!";
    }
}

前端標記 (Page.aspx)

<%@ Register Src="~/Controls/UserControl.ascx" TagPrefix="uc" TagName="MyControl" %>
...
<uc:MyControl ID="myUserControlID" runat="server" />

核心概念

  1. 委派定義:定義事件簽章 (ClickEventHandler)。
  2. 事件宣告:在控件類別中宣告 public event ClickEventHandler Click;。
  3. 引發事件:內部動作 (如按鈕點擊) 呼叫 OnClick 引發事件。
  4. 訂閱事件:頁面在 Page_Init (較早階段) 找到控件實例並掛上處理器。

延伸應用

此模式不限於 UI 層,同樣適用於業務邏輯層 (BLL) 解耦,實作 Observer Pattern,降低物件間耦合度。控件完全不需知道包含它的頁面是誰,僅負責「發布」事件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved