我能够钩住事件,还可以覆盖aspx代码隐藏文件中的load和init ..,事件。我有以下问题。
public partial class Default : System.Web.UI.Page
{
public Default()
{
this.Init += Default_Init;
this.Load+=Default_Load;
}
protected void Default_Load(object sender, EventArgs e)
{ }
protected void Default_Init(object sender, EventArgs e)
{ }
protected override void OnLoad(EventArgs e)
{ }
protected override void OnInit(EventArgs e)
{ }
}
问:
为什么在Page类中存在这样的选项(虚拟方法和事件处理程序)?
当执行重写方法时,不执行我的事件处理程序(Default_Load和Default_Init)。背后的原因是什么?
我应该打电话给base.OnLoad(e);在重写的OnLoad方法?我为什么/不应该呢?
最佳答案
默认情况下,OnInit
和OnLoad
不是Init
和Load
事件的处理程序。它们用于引发Init
和Load
事件。
覆盖时,您更改了这些方法的行为,因此,OnInit
和OnLoad
方法不会触发事件(除非您显式编写base.OnInit
等)。
如果更改OnLoad的行为并且不调用基本方法,则可能会中断asp.net应用程序的页面生命周期。例如,将不会调用Load
事件。