从动态加载的用户控件中引发事件

时间:2009-02-09 16:59:41

标签: c# asp.net

我在主页的Oninit中动态加载UC。

在UC的Oninit,我举办了一个活动。我得到一个空引用异常。代码如下:

//In the UC

public event CommandEventHandler DoneProcessing;
protected override void OnInit(EventArgs e)
{
      //Raise a event
      CommandEventArgs cmdEventArgs = new CommandEventArgs("done", "test");
      DoneProcessing(this, cmdEventArgs);
}

当我在Page Load而不是Oninit中引发事件时,它工作正常,但我不能这样做,因为我必须加载子控件并使事情正常工作(viewstate等),我需要在OnInit上执行此操作

2 个答案:

答案 0 :(得分:1)

我相信你正在尝试Event Bubbling。这是一个Ode to Code Reference,称为ASP.NET中的Web用户控件的事件冒泡(C#)

如前所述,我怀疑您可以使用标准

来停止错误
if (DoneProcessing != null) 
    DoneProcessing(this, cmdEventArgs);

但是我认为问题的根源仍然与页面的加载方式有关。周围有黑客攻击,但“正确”(或推荐)的方式是事件冒泡。

答案 1 :(得分:0)

如果没有处理程序,最好在引发事件之前始终进行空检查。

if (DoneProcessing != null) {
    DoneProcessing(this, cmdEventArgs);
}