|
[笔记]开发asp.net自定义控件(asp.net学习笔记二)
在Web项目上点击右键,选择依赖项,使项目Web取决于MyControls,接着再为Web项目添加MyControls的引用(编译成的MyControls.dll文件后被copy到Web目录的Bin文件夹下,你可以在任何地方使用这个MyControls.dll文件)。
在MyControls项目中添加一个Web自定义控件并命名为MyControl.cs,接着在Web项目中的WebForm1.aspx文件首行添加如下代码(用于向页面注册此控件):
在
标记之间添加如下代码(添加此控件到页面上):
OK,一个带有Text属性的自定义控件已经完成了,现在就可以运行它并观看效果了。
这个控件的结果仅仅是将一行文本输出到浏览器并显示出来,但是我们平时所用到的控件,小到如Label,大到如DataGrid,都是基于这一原理开发出来的。接着我们看一下这个自定义控件源文件(MyControl.cs)的组成。
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
namespace MyControls
{
// Attribute DefaultProperty指定组件的默认属性,ToolboxData指定当从IDE工具中的
//工具箱中拖动自定义控件时为它生成的默认标记
[DefaultProperty("Text"),
ToolboxData("<{0}:MyControl runat=server>")]
//类MyControl派生自WebControl
public class MyControl : System.Web.UI.WebControls.WebControl
{
private string text;
//Attribute Bindable指定属性是否通常用于绑定
//Category指定属性或事件将显示在可视化设计器中的类别
//DefalutValue用于指定属性的默认值
[Bindable(true),
Category("Appearance"),
DefaultValue("")]
public string Text
{
get
{
return text;
}
set
{
text = value;
}
}
//重写WebControl的Render方法,采用HtmlTextWriter类型的参数
protected override void Render(HtmlTextWriter output)
{
//发送属性Text的值到浏览器
output.Write(Text);
}
}
}
现在我们略略修改一下Render方法的输出值,试着为输出文本加上标签Span:
output.Write(""+Text+"");
也可以用标签修饰文本的显示:
output.Write(""+Text+"");
也可以添加更多的属性来控制文本的输出,在此基础上就可以创作出丰富的UI控件。
有时候针对不同的项目我们可能要开发不同用项的服务器控件,比如说特殊用途的DataGrid;有时候我们可能会被要求开发一些常用的控件,比如说像Chart、TreeView、Menu等这一类通用控件。针对于此,你可能会有四种不同的选择:
创建一个用户控件,用它封装其用户界面 (UI) 的服务器控件,无需编写任何额外的代码。
开发一个编译控件,该控件结合了两个或多个现有控件的功能。例如,需要一个封装一个按钮和一个文本框的控件。可以使用复合控件来完成。
从现有控件中派生并重写其属性、方法或事件来自定义现有控件。
从基本控件类之一派生来创建自定义控件。
以上四种方式从难度上来讲顺序依次复杂,使用原则如前所述,只有当前者达不到项目要求时才需考虑后者,一般来说,开发用户控件所使用的编程模型与后三个有着很大不同,它更类似于Asp.Net页的开发。 |
|