熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C#.net Page執行順序

2022-06-13   來源: .NET編程 

  using System;

  using SystemData;

  using SystemConfiguration;

  using SystemWeb;

  using SystemWebSecurity;

  using SystemWebUI;

  using SystemWebUIWebControls;

  using SystemWebUIWebControlsWebParts;

  using SystemWebUIHtmlControls;

  public partial class _Default : Page

  {

  protected void Page_Load(object sender EventArgs e)

  {

  }

  #region OnPreInit 第一步

  protected override void OnPreInit(EventArgs e)

  {

  //檢查 IsPostBack 屬性來確定是不是第一次處理該頁

  //創建或重新創建動態控件

  //動態設置主控頁

  //動態設置 Theme 屬性

  //讀取或設置配置文件屬性值

  //注意

  //如果請求是回發請求則控件的值尚未從視圖狀態還原如果在此階段設置控件屬性則其值可能會在下一事件中被重寫

  baseOnPreInit(e);

  }

  #endregion

  #region OnInit 第二步

  protected override void OnInit(EventArgs e)

  {

  //在所有控件都已初始化且已應用所有外觀設置後引發使用該事件來讀取或初始化控件屬性

  baseOnInit(e);

  }

  #endregion

  #region OnInitComplete 第三步

  protected override void OnInitComplete(EventArgs e)

  {

  //由 Page 對象引發使用該事件來處理要求先完成所有初始化工作的任務

  baseOnInitComplete(e);

  }

  #endregion

  #region PreLoad 第四步

  protected override void OnPreLoad(EventArgs e)

  {

  //如果需要在 Load 事件之前對頁或控件執行處理請使用該事件

  //在 Page 引發該事件後它會為自身和所有控件加載視圖狀態然後會處理 Request 實例包括的任何回發數據

  baseOnPreLoad(e);

  }

  #endregion

  #region OnLoad 第五步

  protected override void OnLoad(EventArgs e)

  {

  //Page 在 Page 上調用 OnLoad 事件方法然後以遞歸方式對每個子控件執行相同操作如此循環往復直到加載完本頁和所有控件為止

  //使用 OnLoad 事件方法來設置控件中的屬性並建立數據庫連接

  baseOnLoad(e);

  }

  #endregion

  #region 控件事件 第六步

  protected void Button_Click(object sender EventArgs e)

  {

  //用這些事件來處理特定控件事件如 Button 控件的 Click 事件或 TextBox 控件的 TextChanged 事件

  //注意

  //在回發請求中如果頁包含驗證程序控件請在執行任何處理之前檢查 Page 和各個驗證控件的 IsValid 屬性

  }

  #endregion

  #region OnLoadComplete 第七步

  protected override void OnLoadComplete(EventArgs e)

  {

  //對需要加載頁上的所有其他控件的任務使用該事件

  baseOnLoadComplete(e);

  }

  #endregion

  #region OnPreRender 第八步

  protected override void OnPreRender(EventArgs e)

  {

  //在該事件發生前

  //Page 對象會針對每個控件和頁調用 EnsureChildControls

  //設置了 DataSourceID 屬性的每個數據綁定控件會調用 DataBind 方法有關更多信息請參見下面的數據綁定控件的數據綁定事件

  //頁上的每個控件都會發生 PreRender 事件使用該事件對頁或其控件的內容進行最後更改

  baseOnPreRender(e);

  }

  #endregion

  #region SaveStateComplete 第九步

  protected override void OnSaveStateComplete(EventArgs e)

  {

  //在該事件發生前已針對頁和所有控件保存了 ViewState將忽略此時對頁或控件進行的任何更改

  //使用該事件執行滿足以下條件的任務要求已經保存了視圖狀態但未對控件進行任何更改

  baseOnSaveStateComplete(e);

  }

  #endregion

  #region Render 第十步

  //Render

  //這不是事件在處理的這個階段Page 對象會在每個控件上調用此方法所有 ASPNET Web 服務器控件都有一個用於寫出發送給浏覽器的控件標記的 Render 方法

  //如果創建自定義控件通常要重寫此方法以輸出控件的標記不過如果自定義控件只合並標准的 ASPNET Web 服務器控件不合並自定義標記則不需要重寫 Render 方法有關更多信息請參見開發自定義 ASPNET 服務器控件

  //用戶控件(ascx 文件)自動合並呈現因此不需要在代碼中顯式呈現該控件

  #endregion

  #region OnUnload 第十一步

  protected override void OnUnload(EventArgs e)

  {

  //該事件首先針對每個控件發生繼而針對該頁發生在控件中使用該事件對特定控件執行最後清理如關閉控件特定數據庫連接

  //對於頁自身使用該事件來執行最後清理工作關閉打開的文件和數據庫連接或完成日志記錄或其他請求特定任務

  //注意

  //在卸載階段頁及其控件已被呈現因此無法對響應流做進一步更改如果嘗試調用方法(如 ResponseWrite 方法)則該頁將引發異常

  baseOnUnload(e);

  }

  #endregion

  }

  當頁面進行回發時如點擊按鈕以上事件都會重新執行一次這時的執行順序為

   OnPreInit

   OnInit

   OnInitComplete

   OnPreLoad

   Page_Load

   OnLoad

   Button_Click

   OnLoadComplete

   OnPreRender

  可以看到Button_Click事件位於OnLoad之後執行可以測試一下

  public partial class TestControls : SystemWebUIPage

  {

  static int count = ;

  protected void Page_Load(object sender EventArgs e)

  {

  ResponseWrite(count+ Page_Load <br />);

  count++;

  }

  protected override void OnPreInit(EventArgs e)

  {

  baseOnPreInit(e);

  ResponseWrite(count + OnPreInit <br />);

  count++;

  }

  protected override void OnInit(EventArgs e)

  {

  baseOnInit(e);

  ResponseWrite(count + OnInit <br />);

  count++;

  }

  protected override void OnLoad(EventArgs e)

  {

  baseOnLoad(e);

  ResponseWrite(count + OnLoad <br />);

  count++;

  }

  protected override void OnPreLoad(EventArgs e)

  {

  baseOnPreLoad(e);

  ResponseWrite(count + OnPreLoad <br />);

  count++;

  }

  protected override void OnLoadComplete(EventArgs e)

  {

  baseOnLoadComplete(e);

  ResponseWrite(count + OnLoadComplete <br />);

  count++;

  }

  protected override void OnInitComplete(EventArgs e)

  {

  baseOnInitComplete(e);

  ResponseWrite(count + OnInitComplete <br />);

  count++;

  }

  protected override void OnUnload(EventArgs e)

  {

  baseOnUnload(e);

  }

  protected override void OnDataBinding(EventArgs e)

  {

  baseOnDataBinding(e);

  ResponseWrite(count + OnDataBinding <br />);

  count++;

  }

  protected override void OnPreRender(EventArgs e)

  {

  baseOnPreRender(e);

  ResponseWrite(count + OnPreRender <br />);

  count++;

  }

  protected void btnGraphics_Click(object sender EventArgs e)

  {

  //Bitmap bmp = new Bitmap( );

  //Graphics g = GraphicsFromImage(bmp);

  ResponseWrite(count + btnGraphics_Click <br />);

  count++;

  }

  }


From:http://tw.wingwit.com/Article/program/net/201311/12283.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.