標籤:http io ar os sp on 問題 cti 代碼
asp.net C#主版頁面和內容頁事件排版載入順序生命週期
關於ASP頁面Page_Load發生在事件之前而導致的問題已經喜聞樂見,對於問題的解釋也很全面,但是如何解決問題則較少有人說明,我就再
簡單說明一下解決方案。以下是內容頁和主版頁面(如果有)的事件發生順序:
ContentPage.PreInit
Master.Init
ContentPage.Init
ContentPage.InitComplite
ContentPage.PreLoad
ContentPage.Load
Master.Load
ContentPage.LoadComplete
ContentPage.PreRender
Master.PreRender
ContentPage.PreRenderComplete
就算知道了發生順序對新手來說也不能怎麼樣,那麼下面重點就來了:
我們都會發現頁面後台有個protected void Page_Load(object sender, EventArgs e)方法
通常大家會把頁面載入時需要做的處理代碼寫在裡面,但是這個方法發生在click事件之前,就導致了很多小問題
那麼有沒有方法是發生在事件之後呢?答案是肯定的:
protected void Page_LoadComplete(object sender, EventArgs e)
是不是很簡單?但是這個方法仍然發生在母片載入之前,如果彈出對話方塊會導致母片排版混亂,那麼用下面這個就好了
protected void Page_PreRenderComplete(object sender, EventArgs e)
於是關於生命週期的問題都迎刃而解,代碼理解起來也流暢多了
以下是頁面載入過程中會啟用的一些方法執行順序,需要在頁面特定階段寫代碼的話可以用上:
protected void Page_Init(object sender, EventArgs e)
protected void Page_Load(object sender, EventArgs e)
各種使用者自訂的控制項click事件
protected void Page_LoadComplete(object sender, EventArgs e)
protected void Page_PreRender(object sender, EventArgs e)
protected void Page_PreRenderComplete(object sender, EventArgs e)
protected void Page_Unload(object sender, EventArgs e)
protected void Page_Error(object sender, EventArgs e)
protected void Page_AbortTransaction(object sender, EventArgs e)
protected void Page_CommitTransaction(object sender, EventArgs e)
protected void Page_DataBinding(object sender, EventArgs e)
protected void Page_Disposed(object sender, EventArgs e)
asp.net C#主版頁面和內容頁事件排版載入順序生命週期