asp.net允许用户创建自己的控件。这些用户定义的控件分为:
用户控件的行为与微型asp.net页面或web表单类似,可以被许多其他页面使用。这些是从system.web.ui.usercontrol
类派生的。这些控件具有以下特征:
.ascx
扩展名。<html>
,<body>
或<form>
标签。page
指令。为了理解这个概念,让我们创建一个简单的用户控件,它将作为页面的页脚。要创建和使用用户控件,请执行以下步骤:
footer.ascx
。 最初,footer.ascx
只包含一个控件指令。<%@ control language="c#" autoeventwireup="true" codebehind="footer.ascx.cs"
inherits="customcontroldemo.footer" %>
将下面的代码添加到文件中(上面代码保持不变,新增下面代码):
<table>
<tr>
<td align="center"> copyright ©2012 - 2018 h3 h3</td>
</tr>
<tr>
<td align="center"> location: haikou </td>
</tr>
</table>
要将用户控件添加到网页,要将register
指令和用户控件的一个实例添加到页面。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 h3 "></asp:label>
</div>
<hr />
<tfooter:footer id="footer1" runat="server" />
</form>
</body>
</html>
需要注意以下几点:
register
指令为控件指定标签名称和标签前缀。<%@ register src="~/footer.ascx" tagname="footer" tagprefix="tfooter" %>
<tfooter:footer id="footer1" runat="server" />
运行上面项目,得到以下结果 -
自定义控件作为单独的程序集部署。 它们被编译成动态链接库(dll),并用作其他asp.net服务器控件。它们可以通过以下任何一种方式创建:
为了理解这个概念,让我们创建一个自定义控件,它将简单地在浏览器上显示一条文本消息。 要创建此控件,请执行以下步骤:
创建一个新的网站(asp.net网站项目:customcontrols )。右键单击【解决方案资源管理器】中树顶部的解决方案(不是项目)。
在“新建项目”对话框中,从项目模板中选择“asp.net服务器控件”(如果没有找到,请从左侧的联机中搜索安装)。
上述步骤添加了一个新项目,并为该解决方案创建了一个完整的自定义控件,称为servercontrol1
。要使用此控件,必须在将网页注册到网页之前将其添加为网站的引用。 要添加对现有项目的引用,请右键单击该项目名称(不是解决方案),然后单击添加引用。
从添加引用对话框的项目选项卡中选择customcontrols
项目。 解决方案资源管理器应显示参考如下图所示 -
要在页面上使用该控件,请在@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>
在上面,我们设置了自定义控件的text
属性的值。asp.net在创建控件时默认添加了此属性。但还需要以下后端代码实现显示功能。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);
}
}
}