演練 開發和使用自定義伺服器控制項 摘自MSDN

2022-05-08 10:03:10 字數 3099 閱讀 5132

此演練演示如何建立和編譯自定義 asp.net 伺服器控制項以及如何在頁中使用該控制項。

通過此演練,您將學會如何執行以下任務:

視覺化設計工具(如 microsoft visual studio 2005)可以簡化控制項的開發過程,但並不是建立或生成自定義控制項的必不可少的工具。可以通過使用任何檔案編輯器建立控制項,並使用 .net framework sdk 附帶的編譯器從命令列生成這些控制項。無論以何種方式建立控制項,在視覺化設計器中控制項的設計時外觀和行為都將相同。頁開發人員可將控制項新增到視覺化設計器的工具箱,可將其拖動到設計圖面上,還可以在屬性瀏覽器中訪問其屬性和事件。在有些視覺化設計器(如 visual studio 2005)中,自定義控制項還可自行支援 intellisense。

建立乙個名為 welcomelabel.cs 或 welcomelabel.vb 的檔案。

將以下**新增到控制項的原始檔中:

code

c#  複製** 

using

system;

using

system.componentmodel;

using

system.security.permissions;

using

system.web;

using

system.web.ui;

using

system.web.ui.webcontrols;

namespace

samples.aspnet.cs.controls

:welcomelabel runat=\

"server\

"> ")

]public

class

welcomelabel : webcontrol

set}

protected

override

void

rendercontents(htmltextwriter writer)}}

writer.write("!

");}}

}下面的**討論並不是執行此演練中的步驟必不可少的內容,可以在開始時跳過。但是,如果您初學控制項創作,我們建議您至少要在完成演練後閱讀此內容。

如果控制項要呈現使用者介面 (ui) 元素或任何其他客戶端可見的元素,則應從system.web.ui.webcontrols.webcontrol(或派生類)派生該控制項。如果控制項要呈現在客戶端瀏覽器中不可見的元素(如隱藏元素或meta元素),則應從 派生該控制項。webcontrol類從control派生,並新增了與樣式相關的屬性,如 、和 。此外,乙個從webcontrol派生的控制項也自行參與到 asp.net 的主題功能。

如果您的控制項要擴充套件現有控制項(如 、label或 控制項)的功能,則可以從該控制項派生。由於welcomelabel擴充套件了label控制項的功能,因此它可從label派生。但是,本演練從webcontrol派生welcomelabel以演示如何定義屬性和定義屬性元資料。

welcomelabel定義乙個text屬性,並使用檢視狀態儲存該屬性值。使用檢視狀態儲存回發間的text值。每次回發時,將重新建立頁並從檢視狀態還原值。如果text值並未儲存在檢視狀態中,則在每次回發時會將值設定為其預設的 。屬性繼承自webcontrol,是儲存資料值的字典。通過使用 鍵,可輸入和檢索值。本例中將「text」用作鍵。字典中的項被型別化為 ,然後必須將其強制轉換為屬性型別。有關更多資訊,請參見 。

welcomelabel控制項通過重寫繼承的 方法呈現其text屬性。傳入rendercontents方法的引數是 型別的物件,是具有呈現標記和其他 html(和 html 變數)標記的方法的實用工具類。

注意,welcomelabel會連續呼叫htmltextwriter物件的 方法,而不是先執行字串串聯然後呼叫write方法。由於htmltextwriter物件直接寫入輸出流,因此這樣可以提高效能。字串串聯需要時間和記憶體來建立字串,然後寫入流。在控制項中實現呈現時,應按照本演練中說明的模式進行操作。

注意通常,在從webcontrol派生控制項並呈現單個元素時,應重寫rendercontents方法(而不是 方法),以呈現控制項標記中的內容。在呈現控制項及其樣式屬性的開始標記之後,webcontrolrender方法將呼叫rendercontents。如果重寫render方法以寫入內容,則控制項將丟失生成到webcontrolrender方法中的樣式呈現邏輯。有關呈現從webcontrol派生的控制項的更多資訊,請參見 web 控制項呈現示例。

應用於welcomelabel的屬性包含由公共語言執行庫和設計時工具使用的元資料。

在類級別上,通過以下屬性標記welcomelabel

welcomelabel控制項還從webcontrol基類繼承了兩個屬性:和 。它們被應用為parsechildren(true)persistchildren(false)。這兩個屬性 (attribute) 一起與toolboxdataattribute屬性 (attribute) 共同使用,這樣可將子元素解釋為屬性 (property),並將屬性 (property) 作為屬性 (attribute) 保留。

以下應用於welcomelabeltext屬性 (property) 的屬性 (attribute) 是標準設計時屬性 (attribute),通常會將標準設計時屬性 (attribute) 應用於控制項的所有公共屬性 (property):

應用於控制項及其成員的設計時屬性在執行時不會影響控制項的功能,但在視覺化設計器中使用控制項時,這些屬效能提公升開發人員的體驗。有關伺服器控制項的設計時、分析時和執行時屬性的完整列表,可參見自定義伺服器控制項的元資料屬性。

自定義伺服器控制項開發(1)

1 呈現伺服器控制項 如果控制項要呈現使用者介面元素或者任何其他客戶端可見的元素,則應從 webcontrol 類派生該控制項。如果控制項要呈現在客戶端瀏覽器中不可見的元素 如隱藏元素或 meta 元素 則應從 control 派生該控制項。control 最重要的方法是 render 方法,它允許...

自定義伺服器控制項ImageButton

在日常專案開發中,我們會經常用到自定義控制項,我們通過乙個簡單的例子來說明,在日常專案中我們經常會用到,或者控制項,我們以imagebutton為例來說明。imgbtn runat server imageurl images add.png 很多時候我們需要在很多頁面上放上面這段 每次都要重複設定...

自定義伺服器控制項ImageButton

在日常專案開發中,我們會經常用到自定義控制項,我們通過乙個簡單的例子來說明,在日常專案中我們經常會用到,或者控制項,我們以imagebutton為例來說明。imgbtn runat server imageurl images add.png 很多時候我們需要在很多頁面上放上面這段 每次都要重複設定...