各位,
我遇到一个奇怪的问题。最近看了thePhile的源码,
觉得其中的一些做法不错,于是自己效仿之,结果就是不行。
thePhile的一个做法是将整个站点的页面抽象一个PhilePage,
这个页面处理最一般的事务,
其他的页面继承自这个页面,
我打开源代码,并追踪发现,确实是严格按照顺序执行的:即父类的构造函数-》父类的Page_Load()-》子类的Page_Load()。但现在我遇到问题了:
我以这种相同的方式处理,结果执行顺序发生了变化:父类的构造函数-》子类的Page_Loag()-》父类的Page_Load(),
追踪了多次都是这样的,
各位可知这是为何?急死我了真是!
我遇到一个奇怪的问题。最近看了thePhile的源码,
觉得其中的一些做法不错,于是自己效仿之,结果就是不行。
thePhile的一个做法是将整个站点的页面抽象一个PhilePage,
这个页面处理最一般的事务,
其他的页面继承自这个页面,
我打开源代码,并追踪发现,确实是严格按照顺序执行的:即父类的构造函数-》父类的Page_Load()-》子类的Page_Load()。但现在我遇到问题了:
我以这种相同的方式处理,结果执行顺序发生了变化:父类的构造函数-》子类的Page_Loag()-》父类的Page_Load(),
追踪了多次都是这样的,
各位可知这是为何?急死我了真是!
{
public BasePage()
{
Console.WriteLine("BasePage Inited");
}
public void Page_Load()
{
Console.WriteLine("Base Page Loaded");
}
}
假设父类是上面这样.那么你说的这两个顺序用子类实现就是:
1.父类的构造函数-》父类的Page_Load()-》子类的Page_Load()
public SubPage : BasePage
{
public SubPage()
{
Console.WriteLine("Sub Page Inited");
}
public void Page_Load()
{
base.Page_Load();
Console.WriteLine("Sub Page Loaded");
}
}2. 父类的构造函数-》子类的Page_Loag()-》父类的Page_Load()public SubPage : BasePage
{
public SubPage()
{
Console.WriteLine("Sub Page Inited");
}
public void Page_Load()
{
Console.WriteLine("Sub Page Loaded");
base.Page_Load();
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.DropDownList1.SelectedIndexChanged += new System.EventHandler(this.DropDownList1_SelectedIndexChanged);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
建议看一下页面生成的流程
thePhile的页面的OnInit(EventArgs e)是这样的,
override protected void OnInit(EventArgs e)
{
base.OnInit(e);
InitializeComponent();
}
而默认生成的页面的OnInit(EventArgs e)是这样的:
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}看来自己太粗心了!
谢谢两位!