【问题标题】:Page.InitComplete handler is not executedPage.InitComplete 处理程序未执行
【发布时间】:2011-08-18 14:39:23
【问题描述】:

我在开发控件时遇到了一个奇怪的问题。我已经为控件中的 Page.InitComplete 事件注册了一个处理程序,但该处理程序没有被执行。我需要在 InitComplete 事件上准确执行处理程序,因为我依赖于复杂的应用程序架构。

我的代码如下所示(这段代码放在我的控件类中):

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);

    this.Page.InitComplete += (sender, args) => OnInitComplete(args);
}

但是,从未输入过 OnInitComplete

如果有可能,我想找到方法将我的处理程序注册到 Page.InitComplete 事件而不使用我自己的事件和奇怪的黑客。

除此之外,我很好奇这种行为的原因。

【问题讨论】:

  • 首先我想我可以复制它,但没有。使用您提供的代码非常适合我。 (.NET 4.0)错误必须在其他地方。您能否提供更多代码以便我们重现它?
  • @atticae 更新了问题。很抱歉打扰您。
  • @danyloid 您能否将您的解决方案添加为下面的答案,以便您接受它?
  • @markc 我会在 8 小时后执行此操作,因为我现在没有足够的声誉来执行此操作。

标签: asp.net custom-server-controls


【解决方案1】:

对不起,是我的错。问题出在自定义 PageBase 类中:

protected override void OnInitComplete(EventArgs e)
{
    if (!String.IsNullOrEmpty(FormAction) && FormActionInitComplete != null)
    {
        FormActionInitComplete(FormActionSender, FormAction, FormActionValue);
    }
}

Page.OnInitComplete方法的实现方式如下:

protected virtual void OnInitComplete(EventArgs e) {
    EventHandler handler = (EventHandler)Events[EventInitComplete];
    if (handler != null) { 
        handler(this, e);
    } 
} 

并且在 PageBase 的覆盖方法中没有调用 base.OnInitComplete 方法 - 这就是没有引发事件的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-31
    • 2019-10-24
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多