2013-09-16 147 views
1

通過回答this example,我試圖在用戶控件級別引發一個事件,然後將其展開到後面的aspx代碼。然而,公共事件似乎從未被附加(或者總是空),因此它從不起泡。我的代碼去如下:.NET用戶控件事件冒泡

// 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(); 
} 

我敢肯定,我是在正確的軌道上,但不知道是不是我錯過了什麼明顯的或愚蠢的。任何人都可以對此有所瞭解嗎?

由於提前,

+0

你爲什麼想讓服務器端事件冒泡? –

回答

0

的BubbleClick總是空,因爲你還沒有分配任何事件處理程序的事件。

+0

在Page_Load事件中,我添加了以下內容:this.BubbleClick + = new EventHandler(Button1_Click);它似乎工作。這是做這件事的正確方法嗎? – archenil

+0

我不會說這是不正確的,但通常你想在ASPX中聲明事件處理程序而不是代碼隱藏,所以OnBubbleClick =「Button1_Click」。希望有所幫助! –

0

我試圖重現你的問題,但失敗了。 您確定這是您嘗試使用的確切代碼嗎?對於我來說,事件處理程序在Page_LoadBubbleControl1_BubbleClick中得到了執行。

+0

感謝您的嘗試,但這是我的確切代碼。 – archenil