偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

ASP.NET復(fù)合控件的呈現(xiàn)引擎

開發(fā) 后端
本文介紹ASP.NET復(fù)合控件的呈現(xiàn)引擎。復(fù)合控件是適合用于構(gòu)建復(fù)雜組件的工具,在復(fù)合控件中,多個(gè)子控件聚合到一起,并在彼此之間以及與外部之間進(jìn)行交互。

復(fù)合控件是適合用于構(gòu)建復(fù)雜組件的工具,在復(fù)合控件中,多個(gè)子控件聚合到一起,并在彼此之間以及與外部之間進(jìn)行交互。呈現(xiàn)控件則只用于只讀式控件聚合,其輸出不包括交互元素(例如下拉框或文本框)。

如果您對(duì)事件處理和回發(fā)數(shù)據(jù)感興趣,我強(qiáng)烈建議您選擇復(fù)合控件。如果使用子控件,則生成復(fù)雜的控件樹會(huì)更加輕松,而且最終結(jié)果也更清晰簡(jiǎn)潔。此外,只有需要提供附加功能時(shí)才需要處理回發(fā)接口。

呈現(xiàn)控件不但需要實(shí)現(xiàn)附加接口,還要將含有屬性值的標(biāo)記靜態(tài)部分縫合到一起。

復(fù)合控件的優(yōu)點(diǎn)還表現(xiàn)在可以呈現(xiàn)多個(gè)同類項(xiàng),這與在 DataGrid 控件中的情況類似。將每個(gè)構(gòu)成項(xiàng)作為活動(dòng)對(duì)象啟用使您可以引發(fā)創(chuàng)建事件并以編程方式訪問它們的屬性。在 ASP.NET 2.0 中,對(duì)于要完全實(shí)現(xiàn)實(shí)際的數(shù)據(jù)綁定復(fù)合控件(上述控件只是隨便的舉例)所需的樣板代碼,絕大部分都隱藏在新基類的折疊部分中:CompositeDataBoundControl。

ASP.NET復(fù)合控件的呈現(xiàn)引擎

在深入探討 ASP.NET 2.0 編碼技術(shù)之前,讓我們回顧一下復(fù)合控件的內(nèi)部例行過程。我們提到過,復(fù)合控件的呈現(xiàn)是集中圍繞 CreateChildControls 方法進(jìn)行的,該方法從 Control 基類繼承而來。您可能會(huì)認(rèn)為,要使服務(wù)器控件呈現(xiàn)其內(nèi)容,替換 Render 方法是必不可少的一步。正如我們先前所看到的,如果 CreateChildControls 被替換,則并不總是需要執(zhí)行這一步。但是,何時(shí)在控件調(diào)用棧中調(diào)用 CreateChildControls 呢?

如圖中所示,在頁(yè)面***次顯示時(shí),會(huì)在預(yù)呈現(xiàn)階段調(diào)用 CreateChildControls。

在預(yù)呈現(xiàn)階段調(diào)用 CreateChildControls

ASP.NET復(fù)合控件:在預(yù)呈現(xiàn)階段調(diào)用 CreateChildControls

特別是,請(qǐng)求處理代碼(在 Page 類中)在將 PreRender 事件引發(fā)至頁(yè)面和每個(gè)子控件之前會(huì)直接調(diào)用 EnsureChildControls。換言之,如果控件樹還未完全生成,則不會(huì)呈現(xiàn)任何控件。

以下代碼段例示了 EnsureChildControls(在 Control 基礎(chǔ)上定義的另一種方法)的偽代碼。

  1. protected virtual void EnsureChildControls()  
  2. {  
  3. if (!ChildControlsCreated)  
  4.    {  
  5. try {  
  6. CreateChildControls();  
  7.        }  
  8. finally {  
  9. ChildControlsCreated = true;  
  10.        }  
  11.    }  
  12. }  

此方法可能會(huì)在頁(yè)面和控件的生命周期內(nèi)反復(fù)調(diào)用。為避免控件重復(fù),ChildControlsCreated 屬性被設(shè)為 true。如果此屬性返回 true,則該方法會(huì)立即退出。

當(dāng)頁(yè)面回發(fā)時(shí),ChildControlsCreated 會(huì)在周期前期調(diào)用。如圖 4 所示,它在已發(fā)布數(shù)據(jù)處理階段調(diào)用。

發(fā)生回發(fā)時(shí)在已發(fā)布數(shù)據(jù)處理階段調(diào)用

ASP.NET復(fù)合控件:發(fā)生回發(fā)時(shí)在已發(fā)布數(shù)據(jù)處理階段調(diào)用

當(dāng) ASP.NET 頁(yè)面開始處理從客戶端發(fā)布的數(shù)據(jù)時(shí),它會(huì)嘗試查找一個(gè)其 ID 與已發(fā)布字段的名稱相匹配的服務(wù)器控件。在執(zhí)行此步驟期間,頁(yè)面代碼會(huì)調(diào)用 Control 類中的 FindControl 方法。反之,該方法需要確保在進(jìn)行操作之前控件樹已完全生成,因此它調(diào)用 EnsureChildControls 并按需要生成控件層次結(jié)構(gòu)。

那么要在 CreateChildControls 方法內(nèi)部執(zhí)行的代碼是怎樣的呢?盡管沒有正式的指南可供遵循,但通常認(rèn)為 CreateChildControls 至少必須完成以下任務(wù):清除 Controls 集合,生成控件樹,并清除子控件的視圖狀態(tài)。并不嚴(yán)格要求必須從 CreateChildControls 方法內(nèi)部設(shè)置 ChildControlsCreated 屬性。實(shí)際上,ASP.NET 頁(yè)面框架始終通過 EnsureChildControls(此方法可自動(dòng)設(shè)置布爾標(biāo)記)來調(diào)用 CreateChildControls。

【編輯推薦】

  1. ASP.NET復(fù)合控件簡(jiǎn)介及要點(diǎn)一覽
  2. ASP.NET控件開發(fā)基礎(chǔ)之復(fù)合控件事件處理淺析
  3. ASP.NET服務(wù)器控件之RenderContents應(yīng)用示例
  4. ASP.NET自定義控件屬性淺析
  5. ASP.NET控件開發(fā)基礎(chǔ)之復(fù)合控件淺析
責(zé)任編輯:yangsai 來源: MSDN
相關(guān)推薦

2009-08-07 15:40:10

CompositeCo復(fù)合控件

2009-08-06 18:18:27

ASP.NET控件開發(fā)ASP.NET復(fù)合控件

2009-08-07 15:45:26

ASP.NET復(fù)合控件數(shù)據(jù)綁定

2009-07-30 16:52:38

復(fù)合控件ASP.NET服務(wù)器控

2009-08-04 12:59:42

ASP.NET控件開發(fā)

2009-08-07 14:55:15

ASP.NET復(fù)合控件

2009-08-06 18:32:00

ASP.NET控件開發(fā)ASP.NET復(fù)合控件

2009-07-27 13:52:36

Panel控件ASP.NET

2009-07-24 15:35:00

ASP.NET Gri

2009-08-17 09:24:25

ASP.NET控件

2009-07-27 17:25:53

ASP.NET驗(yàn)證控件

2009-08-03 15:08:00

SqlDataSour

2009-07-27 16:19:59

ASP.NET報(bào)表控件

2009-07-21 15:11:14

ASP.NET Rou

2012-05-09 13:29:42

ASP.NET

2009-09-11 09:09:00

ASP.NETAdRotator控件

2009-07-20 13:32:24

ScriptManagASP.NET

2009-08-04 11:29:14

HTML代碼ASP.NET控件

2009-07-29 13:50:26

UpdatePanelASP.NET

2009-08-05 15:57:03

ASP.NET控件ID
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)