asp.net OnInit、OnLoad、Page_Load、Page_Init親子ページ実行順序探究
4992 ワード
今回pageページのロードを探るとき、それらの実行順序
BasePage
各メソッド体にブレークポイントを付けて動作
親コンストラクタ"子コンストラクタ"子コンストラクタOnInit"子クラスbase.OnInit(e);》親の親OnInit(e);》【サブクラスPage_Init(object sender,EventArgs e)または親クラスPage_Init(object sender,EventArgs e)イベントが順次実行する】親クラスOnInitにおける残りのコードの実行が完了するサブクラスOnInitにおける残りのコードの実行が完了するサブクラスOnLoadのサブクラスbase.OnLoad(e);》親の親OnLoad(e);》【サブクラスPage_Load(object sender,EventArgs e)または親クラスPage_Load(object sender,EventArgs e)イベントが順次実行されます】親クラスOnLoadの残りのコード実行済み」サブクラスOnLoadの残りのコード実行済み
サブクラスPage_の実行Init(object sender,EventArgs e)または親Page_Init(object sender,EventArgs e)の優先順位は,登録イベントの優先順位によって決まる.
親コンストラクション関数にイベントを登録する場合は、親のイベントを先に実行します.
もう一つの小さな知識点はページに表示されます
AutoEventWireup=「true」という設定
ページを初期化すると自動的にPage_がLoadイベントまたはPage_Initイベント登録.したがって、コメントの登録イベントをコメントをキャンセルすると、サブクラスのPage_Initイベントは2回登録されているため、両方を実行します.
BasePage
public class BasePage : Page
{
public string BaseName { get; set; }
public BasePage()
{
//
//TODO:
//
}
protected override void OnLoad(EventArgs e)
{
int i = 1;
this.Load += Page_Load;
base.OnLoad(e);
i++;
SearchData();
}
protected void Page_Load(object sender, EventArgs e)
{
this.BaseName = " load ";
}
protected override void OnInit(EventArgs e)
{
int i = 1;
this.Init += Page_Init;
base.OnInit(e);
i++;
}
protected void Page_Init(object sender, EventArgs e)
{
this.BaseName = " init ";
}
/// <summary>
///
/// </summary>
public virtual void SearchData()
{
}
}
public partial class TestPage : BasePage
{
public string Name { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
this.Name = " load ";
}
protected override void OnLoad(EventArgs e)
{
int i = 1;
base.OnLoad(e);
i++;
}
protected override void OnInit(EventArgs e)
{
int i = 1;
//this.Init += Page_Init;
base.OnInit(e);
i++;
}
protected void Page_Init(object sender, EventArgs e)
{
this.BaseName = " init ";
}
public override void SearchData()
{
this.Name = " ";
}
}
各メソッド体にブレークポイントを付けて動作
親コンストラクタ"子コンストラクタ"子コンストラクタOnInit"子クラスbase.OnInit(e);》親の親OnInit(e);》【サブクラスPage_Init(object sender,EventArgs e)または親クラスPage_Init(object sender,EventArgs e)イベントが順次実行する】親クラスOnInitにおける残りのコードの実行が完了するサブクラスOnInitにおける残りのコードの実行が完了するサブクラスOnLoadのサブクラスbase.OnLoad(e);》親の親OnLoad(e);》【サブクラスPage_Load(object sender,EventArgs e)または親クラスPage_Load(object sender,EventArgs e)イベントが順次実行されます】親クラスOnLoadの残りのコード実行済み」サブクラスOnLoadの残りのコード実行済み
サブクラスPage_の実行Init(object sender,EventArgs e)または親Page_Init(object sender,EventArgs e)の優先順位は,登録イベントの優先順位によって決まる.
親コンストラクション関数にイベントを登録する場合は、親のイベントを先に実行します.
public class BasePage : Page
{
public string BaseName { get; set; }
public BasePage()
{
this.Load += Page_Load;
this.BaseName = " ";
//
//TODO:
//
}
もう一つの小さな知識点はページに表示されます
AutoEventWireup=「true」という設定
ページを初期化すると自動的にPage_がLoadイベントまたはPage_Initイベント登録.したがって、コメントの登録イベントをコメントをキャンセルすると、サブクラスのPage_Initイベントは2回登録されているため、両方を実行します.