溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

ASP.NET中怎么實現(xiàn)一個復(fù)合控件

發(fā)布時間:2021-07-16 11:19:05 來源:億速云 閱讀:131 作者:Leah 欄目:編程語言

這篇文章給大家介紹ASP.NET中怎么實現(xiàn)一個復(fù)合控件,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

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

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

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

ASP.NET中怎么實現(xiàn)一個復(fù)合控件

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

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

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

protected virtual void EnsureChildControls()  {  if (!ChildControlsCreated)     {  try {  CreateChildControls();         }  finally {  ChildControlsCreated = true;         }     }  }

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

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

ASP.NET中怎么實現(xiàn)一個復(fù)合控件

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

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

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

關(guān)于ASP.NET中怎么實現(xiàn)一個復(fù)合控件就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI