【问题标题】:pass event handler to UserControl for assignment to dynamic LinkButton将事件处理程序传递给 UserControl 以分配给动态 LinkBut​​ton
【发布时间】:2013-10-04 18:19:40
【问题描述】:

我在 UserControl 中有一个公共函数,它接受一个 EventHandler 参数并将其分配给在运行时创建的一堆 LinkBut​​ton。在 EventHandler 中传递的函数位于带有 UserControl 的表单上。没有到达回调函数中定义的断点,所以我认为我做错了什么。

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;

【问题讨论】:

  • 我不会在回发时重新附加处理程序。我需要重建用户控件吗?动态链接按钮在回发后仍然存在,我将如何重新附加它们的处理程序?我想我已经回答了一个被删除的问题......

标签: c# asp.net user-controls


【解决方案1】:

我认为您应该在父页面可以订阅的用户控件中公开一个公共事件。

来自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
}

【讨论】:

  • 请注意,对于事件处理程序,您需要在每个 PostBack 上重新订阅,因此订阅逻辑包含在 IsPostBack 检查中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
  • 2011-02-21
  • 1970-01-01
相关资源
最近更新 更多