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

ASP.NET 2.0 使用者控件事件傳播實作:從子控件觸發至父頁面處理

     編輯:關於ASP.NET

使用者控件封裝多個伺服器控件後,在頁面中表現為單一控件,設計時期無法直接存取其內部子控件。為提供對外介面,需透過屬性控制子控件狀態、事件通知父頁面內部行為發生。

完整實作範例:DataList 選項變更事件向上傳播

使用者控件 uc1.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="uc1.ascx.cs" Inherits="uc1" %>
<asp:DataList ID="dlshow" runat="server" RepeatDirection="Horizontal" OnSelectedIndexChanged="dlshow_SelectedIndexChanged">
    <ItemTemplate>
        <asp:LinkButton ID="linkbtn" runat="server" CommandName="Select" Text='<%# Container.DataItem %>' />
    </ItemTemplate>
</asp:DataList>

uc1.ascx.cs 後置程式碼

public partial class uc1 : System.Web.UI.UserControl
{
    // 定義對外事件
    public event EventHandler TabClick;
    
    private int index;
    public int Index
    {
        get { return index; }
        set { index = value; }
    }
    
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            List<string> list = new List<string> { "tab1", "tab2", "tab3", "tab4" };
            dlshow.DataSource = list;
            dlshow.DataBind();
            dlshow.SelectedIndex = 0;
        }
    }
    
    protected void dlshow_SelectedIndexChanged(object sender, EventArgs e)
    {
        // 示範:直接存取父頁面控件(不推薦生產環境使用,僅示範機制)
        Label lbl = this.Parent.FindControl("lblshow") as Label;
        if (lbl != null) lbl.Text = "Access Parent Page Control";
        
        index = dlshow.SelectedIndex;
        // 觸發自訂事件通知父頁面
        TabClick(this, EventArgs.Empty);
    }
}

父頁面 ShowUc.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ShowUc.aspx.cs" Inherits="ShowUc" %>
<%@ Register TagPrefix="my" TagName="tab" Src="~/uc1.ascx" %>
<html><body>
<form id="form1" runat="server">
<div>
    <my:tab ID="Mytab" runat="server" OnTabClick="Mytab_TabClick" />
    <br />
    <asp:Label ID="lblshow" runat="server" Text="Label" />
</div>
</form>
</body></html>

ShowUc.aspx.cs 事件處理

public partial class ShowUc : System.Web.UI.Page
{
    protected void Mytab_TabClick(object sender, EventArgs e)
    {
        int index = Mytab.Index;
        Response.Write("You selected the index " + index);
    }
}

關鍵設計要點

  • 使用 public event EventHandler 定義對外事件契約
  • 內部事件處理常式中呼叫 TabClick(this, EventArgs.Empty) 觸發
  • 父頁面透過註冊指令引用控件,並在標記中指定 OnTabClick 事件處理常式
  • 屬性 Index 提供狀態查詢介面,實現雙向通訊

此模式實現鬆耦合的元件化架構,是 ASP.NET Web Forms 開發中複用邏輯單元的標準作法。

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