ASP.NET允許用戶創(chuàng)建自己的控件。這些用戶定義的控件分為:
用戶控件的行為與微型ASP.NET頁面或Web表單類似,可以被許多其他頁面使用。這些是從System.Web.UI.UserControl類派生的。這些控件具有以下特征:
.ascx擴(kuò)展名。<html>,<body>或<form>標(biāo)簽。Page指令。為了理解這個(gè)概念,讓我們創(chuàng)建一個(gè)簡(jiǎn)單的用戶控件,它將作為頁面的頁腳。要?jiǎng)?chuàng)建和使用用戶控件,請(qǐng)執(zhí)行以下步驟:
footer.ascx。 最初,footer.ascx只包含一個(gè)控件指令。<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="footer.ascx.cs"
Inherits="customcontroldemo.footer" %>
將下面的代碼添加到文件中(上面代碼保持不變,新增下面代碼):
<table>
<tr>
<td align="center"> Copyright ?2012 - 2018 Yiibai Yiibai</td>
</tr>
<tr>
<td align="center"> Location: Haikou </td>
</tr>
</table>
要將用戶控件添加到網(wǎng)頁,要將Register指令和用戶控件的一個(gè)實(shí)例添加到頁面。Default.aspx文件中的代碼如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Src="~/footer.ascx" TagName="footer" TagPrefix="Tfooter" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>用戶控件示例</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Welcome to ASP.Net Yiibai "></asp:Label>
</div>
<hr />
<Tfooter:footer ID="footer1" runat="server" />
</form>
</body>
</html>
需要注意以下幾點(diǎn):
Register指令為控件指定標(biāo)簽名稱和標(biāo)簽前綴。<%@ Register Src="~/footer.ascx" TagName="footer" TagPrefix="Tfooter" %>
<Tfooter:footer ID="footer1" runat="server" />
運(yùn)行上面項(xiàng)目,得到以下結(jié)果 -

自定義控件作為單獨(dú)的程序集部署。 它們被編譯成動(dòng)態(tài)鏈接庫(DLL),并用作其他ASP.NET服務(wù)器控件。它們可以通過以下任何一種方式創(chuàng)建:
為了理解這個(gè)概念,讓我們創(chuàng)建一個(gè)自定義控件,它將簡(jiǎn)單地在瀏覽器上顯示一條文本消息。 要?jiǎng)?chuàng)建此控件,請(qǐng)執(zhí)行以下步驟:
創(chuàng)建一個(gè)新的網(wǎng)站(ASP.NET網(wǎng)站項(xiàng)目:CustomControls )。右鍵單擊【解決方案資源管理器】中樹頂部的解決方案(不是項(xiàng)目)。
在“新建項(xiàng)目”對(duì)話框中,從項(xiàng)目模板中選擇“ASP.NET服務(wù)器控件”(如果沒有找到,請(qǐng)從左側(cè)的聯(lián)機(jī)中搜索安裝)。
上述步驟添加了一個(gè)新項(xiàng)目,并為該解決方案創(chuàng)建了一個(gè)完整的自定義控件,稱為ServerControl1。要使用此控件,必須在將網(wǎng)頁注冊(cè)到網(wǎng)頁之前將其添加為網(wǎng)站的引用。 要添加對(duì)現(xiàn)有項(xiàng)目的引用,請(qǐng)右鍵單擊該項(xiàng)目名稱(不是解決方案),然后單擊添加引用。
從添加引用對(duì)話框的項(xiàng)目選項(xiàng)卡中選擇CustomControls項(xiàng)目。 解決方案資源管理器應(yīng)顯示參考如下圖所示 -
要在頁面上使用該控件,請(qǐng)?jiān)?code>@Page指令下添加Register指令:
<%@ Register Assembly="CustomControls" Namespace="CustomControls" TagPrefix="ccs" %>
下面就可以使用該控件,與其他控件類似。
<form id="form1" runat="server">
<div>
<ccs:ServerControl1 runat="server" Text = "I am a Custom Server Control" />
</div>
</form>
在上面,我們?cè)O(shè)置了自定義控件的Text屬性的值。ASP.NET在創(chuàng)建控件時(shí)默認(rèn)添加了此屬性。但還需要以下后端代碼實(shí)現(xiàn)顯示功能。ServerControl1.cs 的代碼如下 -
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace CustomControls
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1 >")]
public class ServerControl1 : WebControl
{
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string Text
{
get
{
String s = (String)ViewState["Text"];
return ((s == null) ? "[" + this.ID + "]" : s);
}
set
{
ViewState["Text"] = value;
}
}
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(Text);
}
}
}