【问题标题】:Using the OnInit event in asp.net在 asp.net 中使用 OnInit 事件
【发布时间】:2009-03-20 19:59:03
【问题描述】:

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

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


编辑:

现在我在内容页面中尝试了这个:

(OnPreInit 部分运行,但没有调用 Masters_Init...)

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

    void Masters_Init(object sender, EventArgs e)
    { 
    //code 
    }

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    你是在调用 base.OnInit 吗?

    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
      }
    }
    

    正如 cmets 中所提到的,如果您不必这样做,我建议不要覆盖事件,但如果您必须确保调用基地。所以在你上面的编辑中应该是

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

    【讨论】:

    • 当然,但是事件没有触发:所以没关系
    • 您可以只订阅母版页的 Init 事件而不是覆盖 OnInit 吗?
    • 尝试在页面的构造函数中订阅你的事件。顺便说一句,如果您覆盖任何方法,则始终调用基础。如果不需要,请不要覆盖。
    • public Page1 { Master.Init += Masters_Init; } 抛出:NullReferenceException
    • 尝试在构造函数中添加对 base() 的调用。
    猜你喜欢
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 2010-10-24
    • 1970-01-01
    • 2018-01-27
    相关资源
    最近更新 更多