我在UserControl中有一个公共函数,它接受一个EventHandler参数并将它分配给在运行时创建的一堆LinkButtons。在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(" ", " ");
lb.Click += handlerCallback;
答案 0 :(得分:7)
我认为您应该在用户控件中公开父页面可以订阅的公共事件。
来自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
}