知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
記不住ASP.NET頁面生命周期的苦惱
發(fā)表時間:2020-10-18
發(fā)布人:葵宇科技
瀏覽次數(shù):45
對于ASP.NET開發(fā)者,理解ASP.NET的頁面生命周期是非常重要的。主要是為了搞明白在哪里放置特定的方法和在何時設(shè)置各種頁面屬性。但是記憶和理解頁面生命周期里提供的事件處理方法(method)非常困難?;ヂ?lián)網(wǎng)上有很多關(guān)于頁面生命周期內(nèi)部機制的文章,所以本文只準(zhǔn)備簡單覆蓋技術(shù)的基礎(chǔ)部分,更主要的目的是給大家提供一個簡單得記憶頁面生命周期的方法。
昆明軟件開發(fā)公司中的佼佼者,致力定制軟件開發(fā),昆明軟件開發(fā)請聯(lián)系昆明葵宇科技有限公司,電話:15987118523。
準(zhǔn)確的記憶ASP.NET頁面生命周期每一個階段發(fā)生了什么事情是比較困難的,一種便于記憶的方法是根據(jù)各個階段的名字組合出一個縮寫。微軟的文檔給出的ASP.NET生命周期如下:
Page Request
Start
Page Initialization
Load
Validation
Postback event handling
Rendering
Unload
根據(jù)這個組合出一個縮寫非常容易。既然Page Request技術(shù)上并不是頁面生命周期的一部分(這個階段僅僅標(biāo)示我們是否開始一個頁面周期或者從緩存加載一個頁面),我們?yōu)榱朔奖?,就不包括這一階段。
S – Start
I – Initialize
L – Load
V – Validate
E – Event Handling
R – Render
這樣就組合出一個縮寫“SILVER',這個英文單詞非常好記。當(dāng)然,一定要記住頁面生命周期的最后一個環(huán)節(jié)unload沒有包括在里面。如果你覺得有必要,你可以記憶為“SILVER-U”或者“SILVER-YOU",盡管有點破壞這個記憶法的完美性。現(xiàn)在,我們非常容易就記住了頁面生命周期,接著我們總結(jié)一下每一步都發(fā)生了什么,都有什么事件伴隨著發(fā)生。
1. Start
在這個階段,頁面屬性,比如Request, Response, IsPostBack和UICulture 被創(chuàng)建。最為一個開發(fā)人員,大部分時候在這個階段你不需要做任何事。如果你需要調(diào)用或者重寫(override)這一階段的行為,可以使用PreInit方法創(chuàng)建或者重新創(chuàng)建動態(tài)控件,設(shè)置master page或者theme或者讀取和設(shè)置profile property的值。要注意的一點是,如果是回傳(postback)的頁面請求,所有控件的值還沒有從view state里還原,如果你在這個階段設(shè)置一個控件的值,這個值有可能在下面的階段被重寫并覆蓋
2. Initialize
這個階段對于開發(fā)人員是很重要。在這個階段,theme被應(yīng)用,所有的控件都被設(shè)置了唯一的ID。開發(fā)人員在這個階段可以調(diào)用Init, InitComplete和PreLoad 方法。微軟關(guān)于這些方法使用的建議如下:
Init – 這個事件發(fā)生在所有控件被初始化并且皮膚設(shè)置也被應(yīng)用后。使用這個事件來讀取控件的初始化值。
InitComplete – 這個事件被Page對象觸發(fā),使用這個事件處理那些要求所有初始化工作都完成后才能做的事情。
PreLoad - 如果在頁面或者控件進入Load事件前你有什么要處理的,使用這個事件。Page在觸發(fā)這個事件后,Page就會為自己和所有的控件加載view state并且處理所有Request中的postback數(shù)據(jù)。
3. Load
這個階段可能是開發(fā)者使用得最多的一個階段。在這個階段,所有的控件被viewstate中信息填充并被加載,OnLoad事件被觸發(fā)。在這個階段你可以為頁面上所有的服務(wù)端控件設(shè)置屬性,得到query strings,建立數(shù)據(jù)庫連接。
4. Validation
如果你的控件要求驗證,驗證會在這個階段發(fā)生,這個時候你可以檢查控件的IsValid屬性。跟這個階段關(guān)聯(lián)的事件是Validate,它有一個可以接受驗證字符串群的重載方法(overload method),這個重載方法執(zhí)行特定控件群的驗證。
5. Event Handling
所有服務(wù)器端控件的事件處理發(fā)生在這個階段。也就是說Click, SelectedIndexChanged等等這些事件會應(yīng)用到你的服務(wù)器端控件,如果是頁面請求是回傳(postback)的話,這些事件的處理函數(shù)就會被控件觸發(fā)。這個階段可以使用的事件如下:
LoadComplete – 在這個階段,頁面上所有的控件加載完畢
PreRender – 這里有幾個重點,第一:頁面對象(page object)會調(diào)用每一個控件的EnsureChildControls函數(shù),并最終調(diào)用自己的。其次:所有具有DataSourceID的數(shù)據(jù)綁定控件都會調(diào)用自己的DataBind函數(shù)。要注意的一點是,PreRender事件會發(fā)生在一個頁面的每一個控件上。在這個事件的最后,頁面和所有控件的 ViewState被存儲。
SaveStateComplete – 到這里,ViewState已經(jīng)存儲完畢,如果你有什么操作不需要修改控件但需要修改ViewState的,可以放在SaveStateComplete里面。
6. Render
渲染(Render)實際上不是一個事件,頁面對象調(diào)用每一個控件的Render方法從而按順序的輸出控件的HTML代碼。編寫用戶自定義控件的開發(fā)者對這個階段最感興趣了,因為輸出用戶自定義HTML代碼的標(biāo)準(zhǔn)做法就是重寫Render方法。如果你的控件是從ASP.NET服務(wù)器端控件繼承來的,你也許不需要重寫Render方法,除非你想呈現(xiàn)一個與用戶控件默認行為不同的行為。這些都超出這個文檔要討論的范圍了,如果想了解更多,請參考 Microsoft's Developing Custom ASP.NET Server Controls. ( http://msdn2.microsoft./zt27com/en-us/librarytfhy.aspx)
7. Unload
最后這個事件首先是被各個控件逐一觸發(fā),最后被頁面觸發(fā)。在這個時刻,所有的控件已經(jīng)被渲染為輸出流(output stream)并且無法被修改。這個階段中,任何試圖對response stream的操作都會引發(fā)異常。這個事件主要用于做一些清理工作,比如關(guān)閉數(shù)據(jù)庫連接和打開的文件或者登記事件記錄等等其它任務(wù)。
頁面周期中都有哪些方法
下面列出ASP.NET頁面生命周期中所有的方法,這些方法都可以被重寫(override),要注意的是這些方法有的會遞歸調(diào)用,有個會被頁面中的內(nèi)容重復(fù)調(diào)用,這個列表是按照頁面加載時最通用的順序排列的。
Construct
ProcessRequest
FrameworkInitialize
InitializeCulture
If child controls are present:
AddParsedSubObject
CreateControlCollection
AddedControl
ResolveAdapter
DeterminePostBackMode
OnPreInit
OnInit
TrackViewState
OnInitComplete
OnPreLoad
OnLoad
OnLoadComplete
EnsureChildControls
CreateChildControls
OnPreRender
OnPreRenderComplete
SaveViewState
OnSaveStateComplete
CreateHtmlTextWriter
RenderControl
Render
RenderChildren
VerifyRenderingInServerForm
OnUnload
Dispose
結(jié)論
在開發(fā)ASP.NET程序時,了解什么時候發(fā)生什么事情是非常重要的。理解頁面中事件是如何層層展開節(jié)省大量撓頭和查錯的時間。當(dāng)這些頁面周期中的事件難以記住時,我希望這個使用的法子能幫助你梳理出在程序里哪個地方需要做什么處理。
我寫這篇文章是為了幫助大家,也方便了自己。即使是熟練的開發(fā)人員有時也會忘記那些先那些后。這篇文章不是面面俱到,而是希望給初學(xué)者和中級水平的開發(fā)者提供一些“小技巧”,從而幫助他們避免一些基本的錯誤
相關(guān)案例查看更多
相關(guān)閱讀
- 云南小程序制作
- 云南做百度小程序的公司
- 網(wǎng)站建設(shè)電話
- web學(xué)習(xí)路線
- Web開發(fā)框架
- 云南網(wǎng)站建設(shè)
- 旅游網(wǎng)站建設(shè)
- 云南軟件開發(fā)
- 網(wǎng)絡(luò)公司報價
- 云南省建設(shè)廳網(wǎng)站
- 霸屏推廣
- 保山小程序開發(fā)
- flex
- 網(wǎng)站制作
- 云南網(wǎng)站開發(fā)
- 制作一個小程序
- 跳轉(zhuǎn)小程序
- 云南網(wǎng)站建設(shè)列表網(wǎng)
- 網(wǎng)站沒排名
- 云南網(wǎng)站建設(shè)首選公司
- 云南企業(yè)網(wǎng)站
- 汽車報廢系統(tǒng)
- 搜索引擎排名
- 百度小程序開發(fā)
- 小程序的開發(fā)公司
- 云南省建設(shè)廳官方網(wǎng)站
- 報廢車拆解軟件
- 微信小程序開發(fā)入門課程
- 公眾號模板消息
- 百度快速排名