在asp.net 2.0(fx2.0)中,采用了和asp.net 1.1(fx1.1)不同的编译模型。在fx1.1中,Page_Load事件的挂接是写在CodeBehind的代码中的,到了fx2.0,采用了partial关键字后,估计是编译器自动产生了代码,再和codefile中的代码合并。
fx2.0的编译模式在大多数情况下效果不错,代码文件也变得更简洁了。但一旦使用页面继承时,问题就出来了。
在fx1.1中,可以写如下代码
public class BasePage:Page
{
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.My_Page_Load);
}
protected void My_Page_Load(object sender, EventArgs e)
{
// do somthing public...
PageLoadEvent(sender,e);
}
protected virtual void PageLoadEvent(object sender, EventArgs e) { }
}
public class FooPage:BasePage
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected override void PageLoadEvent(object sender, EventArgs e)
{
// do something here...
}
}
在fx1.1中,这么写没什么问题,FooPage中的Page_Load不会被执行,一切都很正常。
但在fx2.0中,首先,我不能自己挂接Page_Load事件了,因为编译器接管这事了。如果想实现fx1.1中的类似功能,只能这么写了:
public class BasePage:Page
{
protected void Page_Load(object sender, EventArgs e)
{
// do somthing public...
PageLoadEvent(sender,e);
}