如何自定义Asp.Net服务器控件
1、启动VS2010,新建Asp.Net空白项目,如下图:

2、在项目中添加Default.Aspx页面,该页面用于测试。

3、在项目中添加Asp.Net服务器控件,并命名为MyWebControl,如下图:

4、在服务器控件MyWebControl中添加如下代码:
[DefaultProperty("Text")]
[ToolboxData("<{0}:MyWebControl runat=server></{0}:MyWebControl>")]
[ParseChildren(false)]
public class MyWebControl : WebControl
{
public MyWebControl(): base("a")
{
}
public string Href
{
get
{
String href = (String)ViewState["Href"];
return ((href == null) ? String.Empty : href);
}
set
{
ViewState["Href"] = value;
}
}
public override void RenderBeginTag(HtmlTextWriter writer)
{
Attributes["href"] = Href;
base.RenderBeginTag(writer);
}
protected override void RenderContents(HtmlTextWriter output)
{
if (base.HasControls())
{
base.RenderContents(output);
return;
}
output.Write(Href);
}
}
5、在Default.Aspx页面中添加测试代码,如图下:

6、运行测试,效果如下:

7、查看网页源码,如下:

1、自定义Asp.Net服务器控件,就是自定义一个WebControl的子类。
2、标签名通过构造函数设置 public MyWebControl(): base("a");
标签的属性通过Attributes设置Attributes["href"] = Href;
标签的内容通过重写RenderContents函数实现,同时要为自定义服务器控件添加特性[ParseChildren(false)]。
3、当你阅读一个Asp.Net的框架时,可以考虑从继承于WebControl的类开始,因为这样更直观。
4、Asp.Net控件的属性应当保存在ViewState中,这样可以在服务端快速获取控件的属性。
5、还有一些特性,如ToolboxData、DefaultProperty等,用于设计时支持。