Asp.net常見問題搜集(隨時更新)

來源:互聯網
上載者:User

一、資料來源綁定發生在哪個頁面事件中?

——————————————————————解答區——————————————————————

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——————————————————————

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.