【问题标题】:.NET User Control Event Bubbling.NET 用户控制事件冒泡
【发布时间】:2013-09-20 22:29:46
【问题描述】:

通过关注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();
}

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

提前致谢,

【问题讨论】:

  • 为什么要让服务器端事件冒泡?

标签: c# asp.net


【解决方案1】:

BubbleClick 始终为 null,因为您没有为该事件分配任何事件处理程序。

【讨论】:

  • 在Page_Load事件中,我添加了以下内容:this.BubbleClick += new EventHandler(Button1_Click);它似乎工作。这是正确的做法吗?
  • 我不会说这是不合适的,但通常你想在 ASPX 中声明事件处理程序而不是在代码隐藏中,所以 OnBubbleClick="Button1_Click"。希望有帮助!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 2012-08-09
    • 2011-10-20
    • 2011-08-23
    • 1970-01-01
    相关资源
    最近更新 更多