Basecontrol Page.LoadComplete - = Page_LoadComplete如果多次加载子控件则引发Object ref错误

时间:2012-04-13 10:09:42

标签: c# asp.net events event-handling

我有一个基本控制:

public partial class BaseControl : System.Web.UI.UserControl
{
    protected virtual void Page_Load(object sender, EventArgs e)
    {
    }

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        Page.LoadComplete += Page_LoadComplete;
    }

    protected virtual void Page_LoadComplete(object sender, EventArgs e)
    {
        Page.LoadComplete -= Page_LoadComplete;
    }
}

然后我有一个源于此

的控件
public partial class MyChildControl : BaseControl

我遇到的问题是,如果我多次加载MyChildControl,我会在Page.LoadComplete -= Page_LoadComplete;的{​​{1}}上收到对象引用错误。我有点理解为什么,但我有两个问题:

  1. 每个BaseControl不应该引用它自己的MyChildControl版本,而BaseControl又会注册它自己的PageLoadComplete吗?
  2. 如何检查它是否为空?我似乎无法做!= null
  3. 编辑:似乎Page为空,检查Page != null可以解决问题,但我仍然不明白Page是如何为空。

1 个答案:

答案 0 :(得分:2)

Page_LoadComplete不能为空,它只是为方法Page_LoadComplete创建的委托。所以我认为Page.LoadComplete中的Page可能为null或者页面具有自定义逻辑,用于向事件LoadComplete添加处理程序并且在那里有ref错误