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

在aspx頁面中事件的執行順序[1]

2013-11-13 11:00:56  來源: .NET編程 

   一詳細版

  初始化

  當頁面被提交請求第一個方法永遠是構造函數您可以在構造函數裡面初始一些自定義屬性或對象不過這時候因為頁面還沒有被完全初始化所以多少會有些限制特別地您需要使用HttpContext對象當前可以使用的對象包括QueryString Form以及Cookies集合還有Cache對象注意在構造函數裡是不允許使用Session的

  下一個將執行的方法是AddParsedSubObject方法這個方法將添加所有獨立的控件並把頁面組成一個控件集合樹這個方法經常被一些高級的頁面模板解決方案(Page Template Solutions)重寫以便添加頁面內容到頁面模板(Page Template)中一些特殊的控件中這個方法遞歸應用到所有的頁面控件及相應的的每個子控件所有的控件都是在這個方法中開始最早的初始化

  頁面類中下一個將執行的方法是DeterminePostBackMode這個方法允許您修改IsPostBack的值及相關的事件如果您需要從數據庫中加載ViewState這個方法將特別有用因為ViewState只有在IsPostBack為真的情況下才會進行恢復返回空將會導致強制執行非回傳返回RequestForm則強制執行一個回傳除非在特殊情況下否則並不建議去操作這個因為這個還會影響其他的事件

  下一個將要執行的方法是OnInit方法一般這是第一個真正被使用的方法這個方法觸發時所有頁面定義中的控件執行初始化這意味著所有在頁面中定義的值應用到相應的控件上不過ViewState和傳回的值還不會應用到控件上因此任何被代碼或用戶改變的值還沒有被恢復到控件上這個方法通常是最好的創建重創建動態控件的好地方

  恢復及加載

  下一個方法LoadPageStateFromPersistenceMedium只會在頁面被回傳的時候才會被執行如果因為使用Session或自定義存儲方式您修改了後面將要提到的影響ViewState保存方式的方法SavePageStateToPersistenceMedium則這個方法需要被重寫默認的實現中ViewState是一種Base格式編碼並且被保存在頁面的隱藏域中您可以使用這篇文章中提及的方法修改ViewState按以上兩種方式保存注意這個方法並沒有真正加載ViewState到頁面或頁面控件中

  當得到ViewState後下一個方法LoadViewSate將以遞歸的方式恢復ViewState到頁面及各個頁面控件或子控件中這個方法執行後每個控件都將恢復到上一次的狀態但是用戶提交的數據還沒有應用到控件上因為他們不是ViewState的一部分這個方法主要用於恢復您在其他事件中動態生成的控件的值他們的值是您手動保存在ViewSate中並且現在已經失效

  下一個方法是ProcessPostData這個方法也同樣是回傳的時候才會被執行並且不允許被重寫這個是頁面基類的私有方法這個方法通過匹配控件的名稱恢復相應的用戶提交的控件的值到這一步意味著整個頁面都已經被完全恢復了唯一要記住的是所有動態控件的創建必須在這個方法之前這個方法也是記錄後面的改變事件的方法

  下一個方法是OnLoad方法通常這是用得最多的方法因為這個方法是頁面生存期第一個恢復了所有值的地方大多數代碼根據判斷IsPostBack來決定是否重新設置控件狀態您也可以在這個方法中調用Validate並且檢查IsValid的值也可以在這個方法中創建動態控件並且該控件的所有的方法都會被執行以追上當前頁面的狀態包括ViewSate不過不包括回傳的值

  事件處理
   
  下一個方法還是ProcessPostData實際上就是前一個方法的另一次調用它仍然是只在回傳的時候執行並且由於是私有方法不可以被重寫如果您是第一次看頁面的運行軌跡也許會覺得這個方法有些多余但實際上這個方法是必要的因為在OnLoad中創建的動態控件也需要他們回傳的值任何在這以後創建的控件將可以得到他們的ViewState但是不能再得到他們的回傳的值並且不會觸發任何值改變事件(Change Event)

  下一個方法RaiseChangedEvents也是只在回傳頁面中執行並且也因為是基類的私有方法所有不能被繼承在整個頁面生存期中是在這兒根據之前的ProcessPostData記錄的控件的值和提交的值是否不同來觸發值改變事件您也許需要調用Validate或者檢查IsValid的值這裡並沒有特別的說明多個值改變事件的執行先後順序

  下一個方法RaisePostBackEvent同樣是因為是基類的私有方法不能被繼承同樣也是只在回傳頁面中執行除非使用了AutoPostBack不然這是實際提交表單事件執行的地方特別是按鈕或者其實使用javascript提交表單等如果還沒有被手動調用過並且使用了驗證控件那麼Validate會被調用注意IE中有個BUG有時會允許提交但卻不觸發任何事件

  下一個方法是OnPreRender一般這是在客戶端展現頁面之前改變頁面及其控件的最後一次機會您也可以在這個方法裡面創建動態控件並且所有的方法都會被執行以追上當前頁面的狀態包括ViewSate但是私有方法將不會被執行這意味著不會有回傳的值並且不會有事件觸發由於IE中的BUG這是一個沒有事件趕上PostBack的好地方

[]  []  []  


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