.NET用户控件事件冒泡

时间:2013-09-16 17:13:48

标签: c# asp.net

通过以下this example,我试图在用户控制级别引发事件,然后将其冒泡到后面的aspx代码。但是,似乎公共事件从未附加(或始终为空),因此它永远不会起泡。我的代码如下:

// WebUserControl1.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="testEventeventBubbling.WebUserControl1" %>
<div>       
    <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
</div>

// WebUserControl1.ascx.cs
protected void Page_Load(object sender, EventArgs e)
{
    Response.Write("WebUserControl1 :: Page_Load <BR>");
}

protected void Button1_Click(object sender, EventArgs e)
{
    Response.Write("WebUserControl1 :: Begin Button1_Click <BR>");
    OnBubbleClick(e);
    Response.Write("WebUserControl1 :: End Button1_Click <BR>");
}

public event EventHandler BubbleClick;

protected void OnBubbleClick(EventArgs e)
{
    // BubbleClick is always null at this point
    if (BubbleClick != null)
    {
        BubbleClick(this, e);
    }
}   

// Default.aspx
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="testEventeventBubbling._Default" %>

<%@ Register TagPrefix="wuc" TagName="BubbleControl" Src="WebUserControl1.ascx" %>
...
<wuc:BubbleControl id="BubbleControl1" runat="server" />

// Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
    BubbleControl1.BubbleClick += new EventHandler(BubbleControl1_BubbleClick);
}

void BubbleControl1_BubbleClick(object sender, EventArgs e)
{
    throw new NotImplementedException();
}

我很确定我走在正确的轨道上,但不知道我是否错过任何明显或愚蠢的事情。任何人都可以对此有所了解吗?

提前致谢,

2 个答案:

答案 0 :(得分:0)

BubbleClick始终为null,因为您尚未为事件分配任何事件处理程序。

答案 1 :(得分:0)

我试图重现您的问题,但失败了。 您确定这是您尝试使用的确切代码吗?对我来说,事件处理程序在Page_Load中无缝分配,BubbleControl1_BubbleClick被执行。