主要就是父类和子类间OnLoad,OnInit,Load 事件,Init事件的执行先后问题。
一个页面(子类)的Oninit方法最先启动执行,而后递归执行父类中Oninit方法,父类Oninit方法中添加Init事件,执行 Page_Init方法,后再返回父类Oninit方法执行完毕,最后返回子类Oninit方法执行完毕,再执行子类Onload方法,而后递归执行父类中Onload方法,父类Onload方法中添加Load事件,执行Page_Load方法,后再返回父类Onload方法执行完毕,最后返回子类 Oninit方法执行完毕,这样才执行完了。
如下父类:
public class PageBase:System.Web.UI.Page
{
protected override void OnLoad(EventArgs e)
{
string ss = "1";
base.OnLoad(e);
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
}
}
子类:
public partial class _Default :PageBase
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Page_Init(object sender, EventArgs e)
{
// Do any related intialization work.
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
}
}
整个过程是:
最先执行子类_Default 的OnInit的方法,这里调用父类PageBase的OnInit方法,在PageBase的OnInit方法内注册Init事件,执行Page_Init方法,而后返回至父类PageBase的OnInit方法终执行完毕,返回子类Oninit方法执行完毕;接着调用子类_Default 的Onload的方法,这里调用父类PageBase的Onload方法,在PageBase的Onload方法内注册Load事件,执行Page_Load方法,而后返回至父类PageBase的Onload方法终执行完毕,返回子类Onload方法执行完毕。