asp.net OnInit、OnLoad、Page_Load、Page_Init親子ページ実行順序探究

4992 ワード

今回pageページのロードを探るとき、それらの実行順序
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回登録されているため、両方を実行します.