日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

开发和使用自定义服务器控件

發布時間:2025/4/16 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 开发和使用自定义服务器控件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ASP.NET 演練:開發和使用自定義服務器控件

此演練演示如何創建和編譯自定義 ASP.NET 服務器控件以及如何在頁中使用該控件。

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

  • 創建一個 ASP.NET 服務器控件。

  • 向該控件及其成員添加元數據以控制安全性和設計時行為。

  • 使用 ASP.NET 網站中的 App_Code 目錄對控件進行測試(無需手動編譯步驟)。

  • 在配置文件和該控件的程序集中指定一個標記前綴。

  • 將該控件編譯為一個程序集并將其添加到 Bin 目錄中。

  • 將一個位圖嵌入到該控件的程序集中,以作為可視化設計器的工具箱圖標使用。

  • 在頁中使用已編譯的控件。

可視化設計工具(如 Microsoft Visual Studio 2005)可以簡化控件的開發過程,但并不是創建或生成自定義控件的必不可少的工具。可以通過使用任何文本編輯器創建控件,并使用屬于 .NET Framework SDK 一部分的編譯器從命令行生成這些控件。無論以何種方式創建控件,在可視化設計器中控件的設計時外觀和行為都將相同。頁開發人員可將控件添加到可視化設計器的工具箱,可將其拖動到設計圖面上,還可以在屬性瀏覽器中訪問其屬性和事件。在有些可視化設計器(如 Visual Studio 2005)中,自定義控件還可自行支持 IntelliSense。

創建服務器控件

要創建的控件 WelcomeLabel 是一個簡單控件,與標準的 控件類似。WelcomeLabel 類從 派生,它定義了一個 Text 屬性,該屬性允許頁開發人員提供一個文本字符串,以歡迎訪問站點的用戶。如果用戶名出現在用戶瀏覽器發送的標題中,WelcomeLabel 就會將用戶名追加到該文本字符串。有關檢索用戶名的更多信息,請參見 。例如,如果頁開發人員將“Hello”設置為 Text 屬性的值,則根據標題中是否出現用戶名,WelcomeLabel 將呈現“Hello, 用戶名!”或“Hello!”。

創建自定義服務器控件的代碼

創建一個名為 WelcomeLabel.cs 或 WelcomeLabel.vb 的文件。

將以下代碼添加到控件的源文件中:

Visual Basic' WelcomeLabel.vbOption Strict OnImports SystemImports System.ComponentModelImports System.Security.PermissionsImports System.WebImports System.Web.UIImports System.Web.UI.WebControlsNamespace Samples.AspNet.VB.Controls< _AspNetHostingPermission(SecurityAction.Demand, _Level:=AspNetHostingPermissionLevel.Minimal), _AspNetHostingPermission(SecurityAction.InheritanceDemand, _Level:=AspNetHostingPermissionLevel.Minimal), _DefaultProperty("Text"), _ToolboxData( _"<{0}:WelcomeLabel runat=""server""> </{0}:WelcomeLabel>") _> _Public Class WelcomeLabelInherits WebControl< _Bindable(True), _Category("Appearance"), _DefaultValue(""), _Description("The welcome message text."), _Localizable(True) _> _Public Overridable Property Text() As StringGetDim s As String = CStr(ViewState("Text"))If s Is Nothing Then s = String.EmptyReturn sEnd GetSet(ByVal value As String)ViewState("Text") = valueEnd SetEnd PropertyProtected Overrides Sub RenderContents( _ByVal writer As HtmlTextWriter)writer.WriteEncodedText(Text)If Context IsNot Nothing ThenDim s As String = Context.User.Identity.NameIf (s IsNot Nothing) AndAlso (s <> String.Empty) ThenDim split() As String = s.Split("\".ToCharArray)Dim n As Integer = split.Length - 1If (split(n) <> String.Empty) Thenwriter.Write(", ")writer.Write(split(n))End IfEnd IfEnd Ifwriter.Write("!")End SubEnd ClassEnd NamespaceC#// WelcomeLabel.csusing 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{[AspNetHostingPermission(SecurityAction.Demand,Level = AspNetHostingPermissionLevel.Minimal),AspNetHostingPermission(SecurityAction.InheritanceDemand,Level=AspNetHostingPermissionLevel.Minimal),DefaultProperty("Text"),ToolboxData("<{0}:WelcomeLabel runat=\"server\"> </{0}:WelcomeLabel>")]public class WelcomeLabel : WebControl{[Bindable(true),Category("Appearance"),DefaultValue(""),Description("The welcome message text."),Localizable(true)]public virtual string Text{get{string s = (string)ViewState["Text"];return (s == null) ? String.Empty : s;}set{ViewState["Text"] = value;}}protected override void RenderContents(HtmlTextWriter writer){writer.WriteEncodedText(Text);if (Context != null){string s = Context.User.Identity.Name;if (s != null && s != String.Empty){string[] split = s.Split('\\');int n = split.Length - 1;if (split[n] != String.Empty){writer.Write(", ");writer.Write(split[n]);}}}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 派生的控件的更多信息,請參見 。

應用于 WelcomeLabel 的屬性包含由公共語言運行庫和設計時工具使用的元數據。

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

是代碼訪問安全屬性。該屬性使 JIT 編譯器檢查鏈接到 WelcomeLabel 的代碼是否具有 權限。所有的公共 ASP.NET 類均使用此屬性標記。應將 AspNetHostingPermissionAttribute 應用于控件,以對部分受信任的被調用方進行安全檢查。

是設計時屬性 (Attribute),它指定控件的默認屬性 (Property)。在可視化設計器中,當頁開發人員在設計圖面上單擊控件時,屬性瀏覽器通常突出顯示此默認屬性。

指定元素的格式字符串。如果在工具箱中雙擊控件或將其從工具箱拖動到設計圖面上時,該字符串將成為控件的標記。對于 WelcomeLabel,該字符串創建此元素:

<aspSample:WelcomeLabel runat="server"> </aspSample:WelcomeLabel>

WelcomeLabel 控件還從 WebControl 基類繼承了兩個屬性: 和 。它們被應用為 ParseChildren(true) 和 PersistChildren(false)。這兩個屬性 (Attribute) 一起與 ToolboxDataAttribute 屬性 (Attribute) 共同使用,這樣可將子元素解釋為屬性 (Property),并將屬性 (Property) 作為屬性 (Attribute) 保留。

以下應用于 WelcomeLabel 的 Text 屬性 (Property) 的屬性 (Attribute) 是標準設計時屬性 (Attribute),通常會將標準設計時屬性 (Attribute) 應用于控件的所有公共屬性 (Property):

(被指定為 truefalse),指定將屬性綁定到數據對可視化設計器是否有意義。例如,在 Visual Studio 2005 中,如果屬性標記為 Bindable(true),則該屬性可顯示在“數據綁定”對話框中。如果屬性 (Property) 沒有使用此屬性 (Attribute) 標記,則屬性 (Property) 瀏覽器會推斷其值為 Bindable(false)。

指定如何在可視化設計器的屬性瀏覽器中對屬性進行分類。例如,當頁開發人員使用屬性瀏覽器的分類視圖時,Category("Appearance") 將告知屬性瀏覽器在“外觀”類別中顯示屬性。可以根據屬性瀏覽器中的現有類別指定字符串參數,也可以創建自己的類別。

指定屬性的簡短描述。在 Visual Studio 2005 中,屬性瀏覽器將在“屬性”窗口底部顯示選定的屬性的描述。

指定屬性的默認值。此值應與從屬性訪問器 (getter) 返回的默認值相同。在 Visual Studio 2005 中,DefaultValueAttribute 允許頁開發人員通過在“屬性”窗口中喚出快捷菜單然后單擊“重置”按鈕將屬性值重置為其默認值。

(指定為 truefalse)指定本地化屬性對可視化設計器是否有意義。當某屬性標記為 Localizable(true) 時,可視化設計器會在對本地化資源進行序列化時包含該屬性。對控件輪詢可本地化的屬性時,設計器會將此屬性值保存到非特定于區域性的資源文件或其他本地化源中。

注意

由于 ASP.NET 1.0 版和 1.1 版中的 ASP.NET 本地化模型不同,因此在這些版本中不能將 LocalizableAttribute 應用于自定義服務器控件。

應用于控件及其成員的設計時屬性在運行時不會影響控件的功能,但在可視化設計器中使用控件時,這些屬性能提升開發人員的體驗。有關服務器控件的設計時、分析時和運行時屬性的完整列表,可參見。

使用 App_Code 目錄測試控件(無需編譯)

可以使用 ASP.NET 動態編譯功能對頁中的控件進行測試,而無需將控件編譯為程序集。ASP.NET 能動態編譯 ASP.NET 網站根目錄下 App_Code 目錄中放置的代碼。這樣就可以從頁訪問 App_Code 中源文件中的類,而無需將其手動編譯為程序集。如果將控件的源文件放入了 App_Code 目錄,則對控件的代碼所做的更改能立即在使用這些控件的頁中反映出來。

注意

App_Code 目錄是 ASP.NET 1.0 和 1.1 中都沒有的新功能。使用 App_Code 目錄進行初始控件測試是一個可選步驟。生成服務器控件的主要步驟與早期版本相同,下一節“將控件編譯為程序集”將對此進行介紹。

創建 ASP.NET 網站和 App_Code 目錄

創建一個名為 ServerControlsTest 的網站。可以在 IIS 中將該站點創建為名為 ServerControlsTest 的虛擬目錄。有關創建和配置 IIS 虛擬目錄的詳細信息,請參見。

直接在網站根目錄(也稱 Web 應用程序根目錄)下創建一個 App_Code 目錄。

將控件的源文件(WelcomeLabel.cs 或 WelcomeLabel.vb)復制到 App_Code 目錄。

創建標記前綴

標記前綴是指在頁中以聲明方式創建控件時出現在控件類型名稱前面的前綴,如 <asp:Table /> 中的“asp”。若要在頁中以聲明方式使用您的控件,則 ASP.NET 需要一個映射到該控件的命名空間的標記前綴。通過在每個使用自定義控件的頁上添加一個 指令,頁開發人員可提供標記前綴/命名空間映射,如下面的示例所示:

C#<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS.Controls"%>

[Visual Basic]

<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.VB.Controls"%>注意

ASP.NET 2.0 中的 指令與 ASP.NET 1.0 和 ASP.NET 1.1 中的相同。如果您熟悉 ASP.NET 早期版本中的 Register 指令,您會注意到前面的 Register 指令中缺少指定控件程序集名稱的 assembly 屬性。如果缺少 assembly 屬性,則 ASP.NET 會推斷該程序集是從 App_Code 目錄中的源文件動態編譯而來。

除了在每個 .aspx 頁中使用 指令,頁開發人員還可以在 Web.config 文件中指定標記前綴/命名空間映射。如果將在 Web 應用程序的多個頁中使用自定義控件,則該方法非常有用。下面的過程描述如何在 Web.config 文件中指定標記前綴映射。

在 Web.config 文件中添加標記前綴映射

如果不存在名為 Web.config 的文本文件,則請在網站的根目錄下創建該文件。

創建了新的(空的)Web.config 文件之后,將以下代碼復制到該文件中并保存該文件。

C#<?xml version="1.0"?><configuration><system.web><pages><controls><b> <add tagPrefix="aspSample" </b><b> namespace="Samples.AspNet.CS.Controls"></b><b> </add></b></controls></pages></system.web></configuration>

?

Visual Basic<?xml version="1.0"?><configuration><system.web><pages><controls><b> <add tagPrefix="aspSample" </b><b> namespace="Samples.AspNet.VB.Controls"></b><b> </add></b></controls></pages></system.web></configuration>

突出顯示部分是一個標記前綴項,該項將標記前綴“aspSample”映射到命名空間 Samples.AspNet.CS.Controls 或 Samples.AspNet.VB.Controls。

如果已存在一個 Web.config 文件,則請將前一步驟中突出顯示的文本作為該配置文件的 controls 元素的子項添加到該文件中。如果 Web.config 文件中沒有 controlspages 元素,則請按照前一步驟中介紹的方法創建這些元素。

注意

標記前綴項必須是 controls 節的子項,而該節必須位于 pages 節下,而后者又必須是 system.web 的子項。

在配置文件中指定了標記前綴映射之后,可以在網站的任何頁中以聲明方式使用 WelcomeLabel 控件(如 <aspSample:WelcomeLabel />)。

注意

標記前綴的配置項是 ASP.NET 2.0 的新功能。在 ASP.NET 1.0 和 1.1 中,標記前綴映射在每個使用自定義控件的頁的 指令中指定。

創建使用控件的頁

創建使用自定義控件的頁

在網站中創建一個名為 WelcomeLabelTest.aspx 的文本文件。

將以下標記復制到 WelcomeLabelTest.aspx 文件中并保存該文件。

Visual Basic<%@ Page Language="VB"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html ><head id="Head1" runat="server"><title>WelcomeLabel Test</title></head><body><form id="form1" runat="server"><div><aspSample:WelcomeLabel Text="Hello" ID="WelcomeLabel1"runat="server" BackColor="Wheat" ForeColor="SaddleBrown" /></div></form></body></html>C#<%@ Page Language="C#"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html ><head id="Head1" runat="server"><title>WelcomeLabel Test</title></head><body><form id="form1" runat="server"><div><aspSample:WelcomeLabel Text="Hello" ID="WelcomeLabel1"runat="server" BackColor="Wheat" ForeColor="SaddleBrown" /></div></form></body></html>

在地址欄中輸入以下 URL,以在瀏覽器中顯示 WelcomeLabelTest.aspx:

http://localhost/ServerControlsTest/WelcomeLabelTest.aspx

對控件的源代碼做一些更改。例如,通過在 RenderContents 方法末尾處添加此行代碼來多寫一個字符串:

C#writer.Write("Testing how the App_Code directory works.");

?

Visual Basicwriter.Write("Testing how the App_Code directory works.")

在瀏覽器中刷新 WelcomeLabelTest.aspx 頁。

將看到,盡管沒有編譯控件,對控件所做的更改仍在頁中反映出來了。

除了顯式定義的 WelcomeLabel 控件的 Text 屬性之外,從頁中的控件實例可以看到,它還具有之前并沒有定義的 BackColorForeColor 屬性。WelcomeLabel 控件通過從 WebControl 基類繼承,從而獲取與樣式相關的這些屬性和其他屬性。此外,WelcomeLabel 可自行分配外觀并成為主題的一部分。

將控件編譯為程序集

盡管利用 App_Code 目錄可以不編譯就對控件進行測試,但是如果您希望將您的控件作為對象代碼分發給其他開發人員,則必須對其進行編譯。此外,如果沒有將控件編譯為程序集,就不能將該控件添加到可視化設計器的工具箱中。

將控件編譯為程序集

按照以下這些步驟設置計算機的 Windows 環境 PATH 變量,使其包含 .NET Framework 的安裝路徑:

在 Windows 中,右擊“我的電腦”,選擇“屬性”,單擊“高級”選項卡,然后單擊“環境變量”按鈕。

在“系統變量”列表中,雙擊 Path 變量。

在“變量值”文本框中,將一個分號 (;) 添加到文本框中的現有值的末尾,然后鍵入 .NET Framework 的安裝路徑。.NET Framework 通常安裝在位于 \Microsoft.NET\Framework\版本號 的 Windows 安裝目錄中。

單擊“確定”關閉每個對話框。

從為本演練第一步中的源文件創建的目錄中運行以下命令。

注意

這與復制控件源文件以進行測試的 App_Code 目錄不同。

C#csc /t:library /out:Samples.AspNet.CS.Controls.dll /r:System.dll /r:System.Web.dll *.cs

?

Visual Basicvbc /t:library /out:Samples.AspNet.VB.Controls.dll /r:System.dll /r:System.Web.dll *.vb

/t:library 編譯器選項告知編譯器創建一個庫,而不是創建一個可執行程序集。/out 選項為程序集提供名稱,而 /r 選項則列出鏈接到您的程序集的那些程序集。

為保持示例獨立,本演練要求創建具有單個控件的程序集。通常,.NET Framework 設計指導原則建議不要創建只包含很少的類的程序集。為了便于部署,應盡可能少地創建程序集。

在控件程序集中嵌入圖標

可視化設計器(如 Visual Studio 2005)通常使用默認圖標(如齒輪圖像)顯示工具箱中的控件。作為控件的一個選項,可以通過在控件的程序集中嵌入一個 16*16 像素的位圖來自定義控件在工具箱中的外觀。根據約定,可視化設計器將該位圖最下方左側的像素用作透明色。

在控件程序集中嵌入圖標

創建或獲取一個 16*16 像素的位圖,將其作為控件的工具箱圖標。

將該位圖命名為 WelcomeLabel.bmp。

將該位圖文件添加到包含 WelcomeLabel 控件源文件的目錄(CustomControlsCS 或 CustomControlsVB)中。

從包含源文件的目錄中運行以下命令:

C#csc /res:WelcomeLabel.bmp,Samples.AspNet.CS.Controls.WelcomeLabel.bmp/t:library /out:Samples.AspNet.CS.Controls.dll /r:System.dll/r:System.Web.dll *.cs

?

Visual Basicvbc /res:WelcomeLabel.bmp,Samples.AspNet.VB.Controls.WelcomeLabel.bmp/t:library /out:Samples.AspNet.VB.Controls.dll /r:System.dll/r:System.Web.dll *.vb

此命令將編譯控件并將該位圖作為資源嵌入到程序集中。嵌入的位圖資源的名稱必須與關聯控件的命名空間限定名稱完全相同。例如,如果控件名稱為 Samples.AspNet.CS.Controls.WelcomeLabel,則嵌入的位圖的名稱必須為 Samples.AspNet.CS.Controls.WelcomeLabel.bmp。此命名約定使可視化設計器能自動將該位圖用作控件的工具箱圖標。如果不使用此命名約定,則必須將 應用于該控件,以指定嵌入的位圖資源的名稱。

使用 TagPrefixAttribute 提供標記前綴/命名空間映射

在本演練前面的內容中,在介紹使用 App_Code 目錄時講述了頁開發人員如何在頁或 Web.config 文件中指定標記前綴。可以選擇通過包含程序集級別的 屬性,建議可視化設計器應為控件使用的默認標記前綴。如果設計器未找到在 Web.config 文件或頁中的 Register 指令中映射的標記前綴,TagPrefixAttribute 屬性就會為可視化設計器提供可以使用的標記前綴,因此該屬性非常有用。在工具箱中首次雙擊控件或將其從工具箱拖動到頁中時,此標記前綴將向頁進行注冊。

如果決定使用 TagPrefixAttribute 屬性,則可以在與控件一起編譯的單獨文件中指定該屬性。根據約定,該文件名為 AssemblyInfo.語言擴展,如 AssemblyInfo.cs 或 AssembyInfo.vb。下面的過程介紹如何指定 TagPrefixAttribute 元數據。

注意

如果沒有在控件的程序集中指定 TagPrefixAttribute,并且頁開發人員沒有在頁或 Web.config 文件中指定標記前綴/命名空間映射,則可視化設計器將創建一個默認的標記前綴。例如,從工具箱中拖動控件時,Visual Studio 2005 將創建其自己的控件標記,如 cc1。

使用 TagPrefixAttribute 添加命名空間/標記前綴映射

在源代碼目錄中創建一個名為 AssemblyInfo.cs 或 AssemblyInfo.vb 的文件并向該文件添加以下代碼。

C#using System;using System.Web.UI;[assembly: TagPrefix("Samples.AspNet.CS.Controls", "aspSample")]

?

Visual BasicImports SystemImports System.Web.UI<Assembly: TagPrefix("Samples.AspNet.VB.Controls", "aspSample")>

標記前綴屬性在命名空間 Samples.AspNet.CS.Controls 或 Samples.AspNet.VB.Controls 與前綴 aspSample 之間創建映射。

使用前面使用的編譯命令重新編譯所有的源文件(使用或不使用嵌入資源)。

在 ASP.NET 頁中使用已編譯的自定義控件

若要測試自定義控件的已編譯版本,則必須使網站中的頁可以訪問此控件的程序集。

使網站可以訪問控件的程序集

在網站的根目錄下創建一個 Bin 目錄。

將控件程序集(Samples.AspNet.CS.Controls.dll 或 Samples.AspNet.VB.Controls.dll)復制到 Bin 目錄。

從 App_Code 目錄中刪除該控件的源文件。

如果沒有刪除源文件,則您的控件的類型將同時存在于編譯的程序集中和由 ASP.NET 動態生成的程序集中。這在加載該控件時會造成不明確引用,加載任何使用該控件的頁時將生成編譯器錯誤。

本演練中創建的程序集必須放在 ASP.NET 網站的 Bin 目錄中才能使網站中的頁使用您的控件,故而該程序集為私有程序集。如果其他應用程序沒有安裝該程序集的副本,則這些應用程序都不能訪問該程序集。如果要為共享的 Web 宿主應用程序創建控件,通常會將控件打包到一個私有程序集中。但是,如果要創建在專用宿主環境中使用的控件,或要創建 ISP 向所有客戶提供的一系列控件,則需要將您的控件打包到安裝在全局程序集緩存中的一個共享(強名稱)程序集中。有關更多信息,請參見。

接下來,必須修改在 Web.config 中創建的標記前綴映射,以指定控件的程序集名稱。

修改 Web.config 中的標記前綴映射

編輯 Web.config 文件,向 add tagPrefix 元素添加 assembly 屬性:

C#<controls><add tagPrefix="aspSample"namespace="Samples.AspNet.CS.Controls"<b>assembly="Samples.AspNet.CS.Controls</b>"></add></controls>

?

Visual Basic<controls><add tagPrefix="aspSample"namespace="Samples.AspNet.VB.Controls"<b>assembly="Samples.AspNet.VB.Controls</b>"></add></controls>

assembly 屬性指定控件所在的程序集的名稱。add tagPrefix 元素將標記前綴映射到命名空間和程序集的組合。ASP.NET 從 App_Code 目錄中的源文件動態生成程序集時,無需提供程序集屬性。未使用程序集屬性時,ASP.NET 會從通過 App_Code 目錄動態生成的程序集加載控件的類型。

查看使用自定義控件的頁

通過在地址欄中輸入以下 URL,可在瀏覽器中顯示 WelcomeLabelTest.aspx 頁:

http://localhost/ServerControlsTest/WelcomeLabelTest.aspx

如果在可視化設計器(如 Visual Studio 2005)中使用您的控件,可以向工具箱添加您的控件,可以將其從工具箱拖動到設計圖面,還可以在屬性瀏覽器中訪問其屬性和事件。此外,在 Visual Studio 2005 中,您的控件在頁設計器的“源”視圖和代碼編輯器中具有完整的 IntelliSense 支持。這包括 script 塊中的語句結束支持以及頁開發人員單擊控件標記時的屬性瀏覽器支持。

注意

在許多可視化設計器中,可以將自定義控件添加到設計器的工具箱中。有關詳細信息,請參閱設計器文檔。

后續步驟

本演練演示了如何開發簡單的自定義 ASP.NET 服務器控件以及如何在頁中使用該控件。您了解了如何定義屬性以及如何將控件編譯為程序集。有關更多信息,包括有關呈現、定義屬性、維護狀態和實現復合控件的信息,請參見。

在本演練中,您了解了可以為您的控件提供自定義工具箱圖標。您還學習了如何添加設計時元數據,從而為您的控件自定義屬性瀏覽器支持。通過使用在設計時和運行時提供不同用戶界面的可視化設計器類,復雜控件(如 控件)進一步增強了其設計時體驗。ASP.NET 2.0 為服務器控件提供的設計器對象模型與 ASP.NET 1.0 和 1.1 中提供的模型大為不同。若要了解有關在 ASP.NET 2.0 中為您的控件實現自定義設計器類的信息,請參見 。

在 ASP.NET 2.0 中,服務器控件通過使用適配器類可以為客戶端瀏覽器或設備定義不同行為。有關更多信息,請參見

不同的瀏覽器和相同瀏覽器的不同版本支持不同的功能。ASP.NET 服務器控件將自動確定已請求 .aspx 頁的瀏覽器,并為該瀏覽器正確設置所生成的 HTML 標記的格式。但是,部分控件功能無法在較低版本的瀏覽器上呈現,因此需要在盡可能多的瀏覽器類型上查看頁的輸出,以確保頁以預期方式呈現在所有瀏覽器中。有關更多信息,請參見 。

請參見

其他資源

開發自定義 ASP.NET 服務器控件

總結

以上是生活随笔為你收集整理的开发和使用自定义服务器控件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。