一、資料來源綁定發生在哪個頁面事件中?
——————————————————————解答區——————————————————————
1.關於asp.net中資料繫結和相關事件的執行順序
如果通過指定DataSourceId的方式綁定的,資料繫結將在PreRender階段進行
控制項的ItemCreated事件將會在每個條目資料繫結之前進行ItemDataBound在資料繫結完成之後進行
如果使用指定DataSource屬性,然後DataBind的方式對控制項進行綁定,則DataBind語句在哪個事件中,控制項的資料繫結隨之發生在哪個事件中
需要注意的是,當頁面PostBack之後,如果控制項EnableViewState==True,則會發生LoadState事件,這個時候會觸發控制項的ItemCreated事件
但是這個時候不進行資料繫結,e.Item.DateItem中是空的,進行相關操作的話,需要謹慎考慮
對於不是使用DataBind進行手工綁定資料的控制項,在EnableViewState==True的情況下,PostBack之後,不再進行資料繫結
而是從ViewState中恢複原先控制項的樣子.
關於在aspx中的幾個指令碼標記
1. <%# %> asp.net資料繫結運算式,在PreRender或者手工綁定資料的事件中執行。內容為運算式(c#中不以;結尾)
2. <% %> 在Render事件中執行,已經是最後了。內容為語句(C#中以;結尾)
3. <%= %> 在Render事件中執行。內容為運算式(c#中不以;結尾)
假如需要在執行運算式的地方,執行一批語句,可以封裝到Page類的一個Public方法中
2.ASP.Net中控制項和頁面的相關事件
Control_Constructor
OnPreInit
Control_OnInit
OnInit
OnInitComplete
OnPreLoad
Page_Load
Control_OnLoad
OnLoadComplete
OnPreRender
Control_OnPreRender
Control_SaveViewState
Control_SaveViewState
Control_Render
Render
Control_OnUnLoad
OnUnload
注意Control_SaveViewState是在OnUnload之前的
當SaveViewState之後,你再改變什麼東西的話,就無效了,無效了
postback回來,會從viewstate裡面恢複回來的,像見鬼一樣
在綁定資料後可以在Page_PreRenderComplete事件中改變。
——————————————————————end——————————————————————
二、asp.net 2.0生命週期 以及Page_Load、Page_Init方法使用原理
——————————————————————解答區——————————————————————
網頁的生命週期列表:
PreInit (2.0)
->初始化Theme,應用MasterPage和控制項Skin
->Init
->InitComplete (2.0)
->If PostBack,建立子控制項並載入控制項/檢視狀態
->PreLoad (2.0)
->Load
->If PostBack,則觸發伺服器端事件
->LoadComplete (2.0)
->If not PostBack,則建立子控制項
->PreRender
->PreRenderComplete (2.0)
->儲存控制項/檢視狀態
->SaveStateComplete (2.0)
->Render
->Unload
需要注意的是中標註(2.0)的事件即ASP.NET 2.0中新增的事件都僅僅是Page類中可以使用,並不是像其他事件一樣可以在控制項中使用。
ASP.NET 2.0中可以通過啟用(預設值為True)AutoEventWireUp為網頁事件建立事件處理常式,並使用隱式為事件處理常式註冊的方法名。
以下是VS2005隱式為各個事件添加關聯的方法:
事件 -> 方法名
Page.PreInit -> Page_PreInit
Control.Init -> Page_Init
Page.InitComplete -> Page_InitComplete
Page.PreLoad -> Page_PreLoad
Control.Load -> Page_Load
Page.LoadComplete -> Page_LoadComplete
Control.PreRender -> Page_PreRender
Control.DataBinding -> Page_DataBind
Page.PreRenderComplete -> Page_PreRenderComplete
Page.SaveStateComplete -> Page_SaveStateComplete
Control.Unload -> Page_Unload
TemplateControl.Error -> Page_Error
TemplateControl.AbortTransation -> Page_AbortTransation
TemplateControl.AbortTransation -> OnTransationAbort
TemplateControl.CommitTransation -> Page_CommitTransation
TemplateControl.CommitTransation -> OnTransationCommit
Page基類會在請求的開頭階段調用基類TemplateControl的HookUpAutomaticHandlers方法。該方法遍曆上表中所示的方法名,並使用反射在程式員的類中尋找具有相同名稱和合適特徵標的方法。如果找到合適的方法,則建立一個類型合適的委託,並使用該方法初始化它,並將其加入委託列表,該委託在相應事件發生時候將被觸發。
這些事件都是由基類Page的一個虛方法或者Page類從基類Control繼承的虛方法觸發。所以可以有三種方法註冊這些事件:(以Load事件為例)
1、顯式的將一個委託和一個事件關聯起來(通常都是在網頁的Init處理常式中)
2、編寫一個名為Page_Load的方法,並使其特徵標和事件相同
3、重寫Override虛方法Onload
這個三個方法中重寫Override比較快一點點,但是VS2005預設是第二種。
——————————————————————end——————————————————————