我在开发控件时遇到了一个奇怪的问题。我已从控件中注册了 Page.InitComplete 事件的处理程序,但处理程序未执行。我需要在 InitComplete 事件上执行处理程序,因为我依赖于复杂的应用程序架构。
我的代码看起来像这样(此代码放在我的控件类中):
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
this.Page.InitComplete += (sender, args) => OnInitComplete(args);
}
但是,永远不会输入 OnInitComplete 。
如果它在某种程度上可能,我想找到将我的处理程序注册到Page.InitComplete事件的方法,而不使用我自己的事件&奇怪的黑客。
除此之外,我很好奇这种行为的原因。
答案 0 :(得分: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的overriden方法中没有调用 base.OnInitComplete 方法 - 这就是没有引发事件的原因。