頁面生命周期的主要階段包括: 階段 事件/方法
頁面初始化 Page_Init
加載View State LoadViewState
回發(fā)數(shù)據(jù)處理 LoadPostData
頁面加載 Page_Load
回發(fā)通知 RaisePostDataChangedEvent
回發(fā)事件處理 RaisePostBackEvent
頁面預(yù)渲染 Page_PreRender
保存 viewstate SaveViewState
Page渲染 Page_Render
Page 卸載 Page_UnLoad
頁面生命周期的主要事件:
PreInit:
1.檢查IsPostBack 屬性
2.動態(tài)設(shè)置Master Page
3.動態(tài)設(shè)置Theme
4.設(shè)置控件的默認值(UniqueId等)
5.重新創(chuàng)建動態(tài)控件(初始化控件),初始化控件的值
Init: 這個事件發(fā)生在所有的控件被初始化,所有的皮膚設(shè)置被應(yīng)用以后。它用來讀取或者初始化控件屬性。它能夠用來注冊一些aspx頁面中沒有指出的控件的事件。
InitComplete: Use this event for processing tasks that require all initialization to be complete.
PreLoad: 加載頁面的ViewState和所有的控件,然后處理所有的包含在Request實例中的postback數(shù)據(jù)。
Load: 這個事件可能是大家最熟悉的了。需要注意的是,Page對象會遞歸的調(diào)用子控件的onload事件直到頁面和所有的子控件被加載完成。這個事件主要用來設(shè)置控件屬性的值,建立數(shù)據(jù)庫連接(通常不這么做)。
Validation: 如果你的控件要求驗證,驗證會在這個階段發(fā)生,這個時候你可以檢查控件的IsValid屬性。跟這個階段關(guān)聯(lián)的事件是Validate,它有一個可以接受驗證字符串群的重載方法(overload method),這個重載方法執(zhí)行特定控件群的驗證。
Control events: 這個就不多說了,主要是處理控件的事件,例如click。這也就讓我們明白了每次我們click一個Button的時候,實際上是要先去執(zhí)行l(wèi)oad事件然后才執(zhí)行click事件的,一般我們用!IsPostBack來判斷一下從而避免執(zhí)行不必要的加載邏輯。
LoadComplete: 頁面所有的控件都被加載以后執(zhí)行,暫時沒有想到用來干什么。。。
PreRender: 在HTML被生成之前這是最后一個事件。每一個頁面中的控件都有PreRender的過程。在這里對將要輸出的HTML結(jié)果進行最后一次修改。
SaveStateComplete: 在這個時間發(fā)生之前,已經(jīng)保存了所有控件和頁面的,任何對page或者控件的改動都不會產(chǎn)生左右。暫時沒想到用來干啥。
Render: 它不是一個事件而是一個方法。工作就是把HTML寫回客戶端瀏覽器。
UnLoad: 頁面中的每一個控件都會發(fā)生這件事。在控件中,使用這個事件來做清理工作,例如關(guān)閉數(shù)據(jù)庫連接等。對與頁面本身也是做清理工作,例如關(guān)閉打開的文件和數(shù)據(jù)庫連接,或者結(jié)束日志或者其它指定的工作。
需要說明的是,每次Request都會創(chuàng)建一個全新的Page類的實例,所以在頁面中的自己定義的字段是不能在兩次request中傳遞值的,需要使用viewstate來存儲。
更多信息請查看IT技術(shù)專欄