【问题标题】:Subscribing to an event defined in the base user control - ASP.NET订阅基本用户控件中定义的事件 - ASP.NET
【发布时间】:2011-04-05 17:58:37
【问题描述】:

我有一个基本用户控件(继承自 System.Web.UI.UserControl

public delegate void MyEventHandler(object sender, MyEventArgs e);
public event MyEventHandler ControlLoaded;

//Fire the event from here
protected override void OnLoad(EventArgs e)
{
  MyEventArgs cmdEventArgs = new MyEventArgs("somearg");
  ControlLoaded(this, cmdEventArgs);
}

我有几个从这个基本用户控件派生的控件。

在宿主 ASPX 页面上,我需要订阅 ControlLoaded 事件。

protected void Page_Load(object sender, EventArgs e)
{
  //subscribe to the event
  //This line DOES NOT WORK as I cannot attach event to a base control - It needs an instance of the user control which I don't have
  BaseUserControl.ControlLoaded += new MyEventHandler(ControlLoaded);
}

private void ControlLoaded(object sender, MyEventArgs e)
{
 // some control has been loaded
}

如何订阅ControlLoaded 事件?谢谢

【问题讨论】:

    标签: .net asp.net events delegates


    【解决方案1】:

    如果没有要订阅的实例,您就无法真正订阅实例事件。您可以使用 BaseUserControl 上的静态事件来执行此操作。然而,这不是一个好主意。因为您需要绝对确保在请求完成之前取消订阅该事件,以防止内存泄漏。

    【讨论】:

    • 你能解释一下静态方法是如何工作的(希望有一些代码?)如果我在从 BaseUserControl 继承的页面上加载了几个用户控件,静态方法是否仍然有效?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 2011-12-27
    相关资源
    最近更新 更多