2013-10-04 69 views
2

我在UserControl中拥有一个公共函数,该函数接受EventHandler参数并将其分配给在运行时创建的一堆LinkBut​​ton。在EventHandler中传递的函数位于具有UserControl的窗体上。在回调函数中定义的断点没有被达到,所以我认为我做错了什么。将事件处理程序传递给UserControl以分配给动态LinkBut​​ton

Default.aspx的

<uc1:tcControl runat="server" ID="tc1" /> 

Default.aspx.cs

tcControl1.ShowTags(new EventHandler(ClickHandler)); 

void ClickHandler(object sender, EventArgs e) 

tcControl.ascx.cs

public void ShowTags(EventHandler handlerCallback) 

LinkButton lb = new LinkButton(); 
lb.ID = t.Name.Replace(" ", "_"); 
lb.Text = t.Name.Replace(" ", "&nbsp;"); 
lb.Click += handlerCallback; 
+0

我不会重新连接上回发的处理程序。我需要重建UserControl吗?动态LinkBut​​tons在回发中存活,我将如何重新连接它们的处理程序?我想我已经回答了一个被删除的问题... – Metaphor

回答

5

我想你应该在你的用户控件父页面可以订阅公开公共事件。

http://www.marten-online.com/csharp/simple-custom-event-handling.html

public delegate void LinkButtonClickHandler (object sender, EventArgs data); 

    // The event 
    public event LinkButtonClickHandler LinkButtonClicked; 

    // The method which fires the Event 
    protected void OnLinkButtonClick (object sender, EventArgs data) 
    { 
     // Check if there are any Subscribers 
     if (LinkButtonClicked!= null) 
     { 
      // Call the Event 
      LinkButtonClicked(this, data); 
     } 
    } 

现在,你的父母页面上,你可以订阅这个事件在Page_Load事件:

public void Page_Load() 
{ 
    userControl.LinkButtonClicked += HandleUserControlLinkButtonClicked; 
} 

private void HandleUserControlLinkButtonClicked(object sender, EventArgs data) 
{ 
    // Handle the click as you wish 
} 
+1

请注意,使用事件处理程序时,您需要在每个PostBack上重新订阅,因此订阅逻辑不会**包裹在“IsPostBack”检查中。 –

相关问题