男女做爽爽视频免费观看_西西无码在线观看_亚洲一区制服无码中文_日韩欧无码毛片

aspx頁(yè)面事件執(zhí)行順序

時(shí)間: 2020-06-01 20:02 瀏覽次數(shù):

aspx頁(yè)面事件執(zhí)行順序

首先,詳細(xì)版本L初始化。提交頁(yè)面時(shí),第一個(gè)方法始終是構(gòu)造函數(shù)。您可以在構(gòu)造函數(shù)中啟動(dòng)一些自定義屬性或?qū)ο?,但此時(shí)有一些限制,因?yàn)轫?yè)面尚未完全初始化。特別是,您需要使用HttpContext對(duì)象。當(dāng)前可用的對(duì)象包括查詢字符串、表單、Cookies集合和緩存對(duì)象。注意:構(gòu)造函數(shù)中不允許會(huì)話。

下一個(gè)要執(zhí)行的方法是AddParsedSubObject方法,它添加所有獨(dú)立的控件并將頁(yè)面形成一個(gè)控件集合樹。這種方法經(jīng)常被一些高級(jí)的頁(yè)面模板解決方案重寫,以將頁(yè)面內(nèi)容添加到頁(yè)面模板中的一些特殊控件中。此方法遞歸應(yīng)用于所有頁(yè)面控件和相應(yīng)的子控件。在此方法中,所有控件都在最早的時(shí)間初始化。

頁(yè)面類中要執(zhí)行的下一個(gè)方法是DeterminePostBackMode。此方法允許您修改IsPostBack和相關(guān)事件的值。如果您需要從數(shù)據(jù)庫(kù)加載視圖狀態(tài),這個(gè)方法特別有用,因?yàn)橹挥挟?dāng)IsPostBack為真時(shí),視圖狀態(tài)才會(huì)被恢復(fù)。返回空將導(dǎo)致強(qiáng)制執(zhí)行非回發(fā),同時(shí)返回請(qǐng)求。窗體將強(qiáng)制回發(fā)。除非在特殊情況下,建議不要操作它,因?yàn)檫@也會(huì)影響其他事件。

下一個(gè)要執(zhí)行的方法是OnInit方法,這通常是第一個(gè)實(shí)際使用的方法。當(dāng)觸發(fā)此方法時(shí),頁(yè)面定義中的所有控件都將被初始化,這意味著頁(yè)面中定義的所有值都將應(yīng)用于相應(yīng)的控件。但是,視圖狀態(tài)和返回值不會(huì)應(yīng)用于控件,因此由代碼或用戶更改的任何值都不會(huì)恢復(fù)到控件中。此方法通常是創(chuàng)建和重新創(chuàng)建動(dòng)態(tài)控件的最佳位置。L恢復(fù)并加載下一個(gè)方法,LoadPageStateFromPerpersistenceIum將僅在返回頁(yè)面時(shí)執(zhí)行。如果您修改方法SavePageStateToPersistence,則需要重寫此方法,因?yàn)槟褂玫氖菚?huì)話或自定義保存方法,這將在后面提到,并且會(huì)影響視圖狀態(tài)保存方法。在默認(rèn)實(shí)現(xiàn)中,視圖狀態(tài)以Base64格式編碼,并保存在頁(yè)面的隱藏字段中。您可以使用本文中提到的方法修改視圖狀態(tài),并以上述兩種方式保存它。注意:此方法實(shí)際上不會(huì)將視圖狀態(tài)加載到頁(yè)面或頁(yè)面控件中。

當(dāng)獲得視圖狀態(tài)時(shí),下一個(gè)方法LoadViewSate將遞歸地將視圖狀態(tài)恢復(fù)到頁(yè)面和每個(gè)頁(yè)面控件或子控件。執(zhí)行此方法后,每個(gè)控件都將返回到其以前的狀態(tài),但用戶提交的數(shù)據(jù)尚未應(yīng)用于控件,因?yàn)樗鼈儾皇且晥D狀態(tài)的一部分。此方法主要用于恢復(fù)您在其他事件中動(dòng)態(tài)生成的控件的值。它們的值被手動(dòng)存儲(chǔ)在視圖狀態(tài)中,現(xiàn)在無(wú)效。

下一個(gè)方法是ProcessPostData,它也只在返回時(shí)執(zhí)行,不允許重寫。這是頁(yè)面基類的私有方法。此方法通過(guò)匹配控件的名稱來(lái)恢復(fù)相應(yīng)的用戶提交控件的值。這一步意味著整個(gè)頁(yè)面已經(jīng)完全恢復(fù)。唯一要記住的是,所有動(dòng)態(tài)控件都必須在此方法之前創(chuàng)建。此方法也是記錄后續(xù)變更事件的方法。

下一個(gè)方法是OnLoad方法,它通常是最常用的方法,因?yàn)樗琼?yè)面生命周期中所有值被恢復(fù)的第一個(gè)地方。大多數(shù)代碼根據(jù)IsPostBack判斷來(lái)決定是否重置控件的狀態(tài)。您也可以在此方法中調(diào)用驗(yàn)證,并檢查值是否有效。您也可以在這個(gè)方法中建立動(dòng)態(tài)控制項(xiàng),控制項(xiàng)的所有方法都會(huì)被執(zhí)行,以趕上目前的頁(yè)面狀態(tài),包括檢視狀態(tài),但不包括傳回的值。L事件處理的下一個(gè)方法是ProcessPostData,它實(shí)際上是前一個(gè)方法的另一個(gè)調(diào)用。它仍然只在回發(fā)時(shí)執(zhí)行,不能重寫,因?yàn)樗且粋€(gè)私有方法。如果這是您第一次查看頁(yè)面的運(yùn)行軌跡,您可能會(huì)發(fā)現(xiàn)這種方法是多余的。但事實(shí)上這個(gè)方法是必要的,因?yàn)樵贠nLoad中創(chuàng)建的動(dòng)態(tài)控件也需要它們返回的值。此后創(chuàng)建的任何控件都將獲得它們的視圖狀態(tài),但不再獲得它們的返回值,也不會(huì)觸發(fā)任何值更改事件。

下一個(gè)方法RaiseChangedEvents也只在回發(fā)頁(yè)面中執(zhí)行,因?yàn)樗腔惖乃接蟹椒?,所以不能全部繼承。在整個(gè)頁(yè)面生命周期中,值更改事件是根據(jù)前一個(gè)ProcessPostData記錄的控件值是否與提交的值不同而觸發(fā)的。您可能需要調(diào)用驗(yàn)證或檢查IsValid的值。這里沒有關(guān)于多個(gè)值更改事件的執(zhí)行順序的具體解釋。

下一個(gè)方法RaisePostBackEvent也是因?yàn)樽鳛榛惖乃接蟹椒ú荒鼙焕^承,并且只能在回發(fā)頁(yè)面中執(zhí)行。除非使用自動(dòng)提交,否則這是實(shí)際表單提交事件的執(zhí)行位置,尤其是按鈕或表單實(shí)際上是使用javascript提交的。如果沒有手動(dòng)調(diào)用驗(yàn)證控件,將調(diào)用驗(yàn)證。請(qǐng)注意,IE中有一個(gè)BUG,它有時(shí)允許提交,但不會(huì)觸發(fā)任何事件。

下一個(gè)方法是OnPreRender,這通常是在客戶端顯示頁(yè)面之前更改頁(yè)面及其控件的最后機(jī)會(huì)。您也可以在此方法中創(chuàng)建動(dòng)態(tài)控件,所有方法都將被執(zhí)行以跟上當(dāng)前頁(yè)面狀態(tài),包括視圖狀態(tài),但私有方法不會(huì)被執(zhí)行,這意味著不會(huì)有返回值和事件觸發(fā)器。由于IE中的錯(cuò)誤,這是一個(gè)無(wú)需任何事件就能趕上回發(fā)的好地方。下一個(gè)保存和顯示的方法是保存視圖狀態(tài)。無(wú)論它是否是回發(fā)頁(yè)面,它都將被遞歸執(zhí)行以保存頁(yè)面及其所有控件的視圖狀態(tài)。ViewState基本上保存了所有不同于aspx中定義的原始值的值,無(wú)論是由代碼還是用戶更改的。請(qǐng)注意,控制值是根據(jù)它們?cè)陧?yè)面控制樹中的位置來(lái)保存的,所以如果以后將動(dòng)態(tài)控制添加到錯(cuò)誤的位置,將會(huì)導(dǎo)致混亂。

下一個(gè)方法是保存頁(yè)面的視圖狀態(tài)。此方法與LoadPageStateFromPresenCompedium一起被重寫,以將視圖狀態(tài)保存到會(huì)話或其他自定義數(shù)據(jù),而不是使用隱藏字段。這對(duì)低帶寬用戶非常有幫助。對(duì)于移動(dòng)設(shè)備,會(huì)話是默認(rèn)設(shè)置。下面的文章描述了使用上述兩種方法保存視圖狀態(tài)的具體細(xì)節(jié)。請(qǐng)注意,Asp.net中有一個(gè)錯(cuò)誤:Asp.net要求提交__viewstate字段,即使它是空的。

下一個(gè)方法是Render方法,它遞歸地創(chuàng)建相應(yīng)控件的html并將其發(fā)送到瀏覽器。此方法被一些頁(yè)面模板方案重寫,以添加一些常見的頁(yè)眉和頁(yè)腳,而不是使用服務(wù)器控件。他們總是有額外的東西。請(qǐng)注意,這里的更改只能使用純HTML,因?yàn)榭丶呀?jīng)在這里生成了。您可以使用StringBuilder、StringWriter、HtmlTextWriter來(lái)捕獲相應(yīng)的HTML輸出。

最后一個(gè)方法是OnUnload,它調(diào)用相應(yīng)的Dispose方法。此方法提供了清空頁(yè)面中使用的非托管資源的機(jī)會(huì),例如關(guān)閉打開的文件句柄、以前打開的數(shù)據(jù)庫(kù)連接等。請(qǐng)注意,此方法是在頁(yè)面發(fā)送到客戶端后執(zhí)行的,因此它只影響服務(wù)器對(duì)象,不會(huì)顯示在頁(yè)面的顯示軌道中。這是頁(yè)面的生命周期,針對(duì)每個(gè)請(qǐng)求運(yùn)行。第二,簡(jiǎn)化版

事件將在頁(yè)面執(zhí)行期間按以下順序激活:頁(yè)面。預(yù)初始化- >。頁(yè)面。初始化- >。頁(yè)面。initcompliante->;頁(yè)面。預(yù)載- >。頁(yè)面。加載->。頁(yè)面。加載完成- >。頁(yè)面。先決條件- >。

頁(yè)面。預(yù)理解完成

如果頁(yè)面是從頁(yè)面繼承的,如基礎(chǔ)頁(yè)面:系統(tǒng)。一些擴(kuò)展是在基本頁(yè)面中進(jìn)行的,比如權(quán)限檢查,而其他頁(yè)面是從基本頁(yè)面繼承的,基本頁(yè)面和最終頁(yè)面的事件激活順序是:

用戶界面。預(yù)初始化- >。頁(yè)面。預(yù)初始化- >。用戶界面。初始化- >。頁(yè)面。初始化- >。用戶界面。initcompliante->;頁(yè)面。initcompliante->;用戶界面。預(yù)載- >。頁(yè)面。預(yù)載- >。用戶界面。加載->。頁(yè)面。加載->。用戶界面。加載完成- >。頁(yè)面。加載完成- >。用戶界面。先決條件- >。頁(yè)面。先決條件- >。用戶界面。預(yù)理解完成- >。頁(yè)面。預(yù)理解完成

如果使用母版頁(yè),母版頁(yè)和內(nèi)容頁(yè)中的事件將按以下順序激活:

內(nèi)容頁(yè)面。PreInit

主人。初始化

內(nèi)容頁(yè)面。初始化

內(nèi)容頁(yè)面。initcompliante

內(nèi)容頁(yè)面。預(yù)載

內(nèi)容頁(yè)面。負(fù)荷

主人。負(fù)荷

內(nèi)容頁(yè)面。加載完成

內(nèi)容頁(yè)面。預(yù)發(fā)布者

主人。預(yù)發(fā)布者

內(nèi)容頁(yè)面。預(yù)理解完成

此外,如果ContentPage繼承了BasePage,每個(gè)事件的執(zhí)行順序?qū)⒆優(yōu)?

用戶界面。PreInit

內(nèi)容頁(yè)面。PreInit

主人。初始化

用戶界面。初始化

內(nèi)容頁(yè)面。初始化

用戶界面。initcompliante

內(nèi)容頁(yè)面。initcompliante

用戶界面。預(yù)載

內(nèi)容頁(yè)面。預(yù)載

用戶界面。負(fù)荷

內(nèi)容頁(yè)面。負(fù)荷

主人。負(fù)荷

用戶界面。加載完成

內(nèi)容頁(yè)面。加載完成

用戶界面。預(yù)發(fā)布者

內(nèi)容頁(yè)面。預(yù)發(fā)布者

主人。預(yù)發(fā)布者

用戶界面。預(yù)理解完成

內(nèi)容頁(yè)面。預(yù)理解完成