C# 在asp.net中使用OnInit事件

C# 在asp.net中使用OnInit事件,c#,asp.net,C#,Asp.net,我让contentpage覆盖母版页的OnInit事件。覆盖工作正常,直到我在页面上放置了自定义用户控件:在这种情况下,不会为contentpage触发OnInit事件(用户控件中没有使用覆盖) 可能的原因/解决方案是什么?(我使用OnInit事件创建动态控件) 编辑: 现在我在内容页中尝试了以下方法: (OnPreInit部分运行,但不会调用Masters_Init…) 你在给基地打电话吗 public override void OnInit(EventArgs e) { // cod

我让contentpage覆盖母版页的OnInit事件。覆盖工作正常,直到我在页面上放置了自定义用户控件:在这种情况下,不会为contentpage触发OnInit事件(用户控件中没有使用覆盖)

可能的原因/解决方案是什么?(我使用OnInit事件创建动态控件)


编辑:

现在我在内容页中尝试了以下方法:

(OnPreInit部分运行,但不会调用Masters_Init…)


你在给基地打电话吗

public override void OnInit(EventArgs e)
{
  // code before base oninit
  base.OnInit(e);
  // code after base oninit
}
更新

public class Page1 : Page
{
  public Page1 : base() {
    PreInit += Page_PreInit;
  }
  void Page_PreInit(object sender, EventArgs e)
  {
    Master.Init += Master_Init;
  }
  void Master_Init(object sender, EventArgs e)
  {
    //code
  }
}
同样正如在评论中提到的,如果不需要,我建议不要覆盖事件,但是如果必须调用base。所以在上面的编辑中应该是

protected override void OnPreInit(EventArgs e)
{
  base.OnPreInit(e);
  base.Master.Init += new EventHandler(Masters_Init);
}

当然可以,但是事件没有触发:所以不管怎样都没关系。您可以订阅母版页的Init事件,而不是覆盖OnInit吗?请尝试在页面的构造函数中订阅您的事件。顺便说一句,如果重写任何方法,请始终调用基。如果不必重写.public Page1{Master.Init+=Masters_Init;}throws:nullReferenceException在构造函数中添加对base()的调用,则不要重写。
protected override void OnPreInit(EventArgs e)
{
  base.OnPreInit(e);
  base.Master.Init += new EventHandler(Masters_Init);
}