asp.net2.0自定义服务器控件开发(二)
2008-02-06 16:56
435 查看
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030196/6810355c2f78c12e91b7997a8e8c583a.gif)
using System;
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030196/6810355c2f78c12e91b7997a8e8c583a.gif)
using System.ComponentModel;
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030196/6810355c2f78c12e91b7997a8e8c583a.gif)
using System.Security;
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030196/6810355c2f78c12e91b7997a8e8c583a.gif)
using System.Security.Permissions;
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030196/6810355c2f78c12e91b7997a8e8c583a.gif)
using System.Web;
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030196/6810355c2f78c12e91b7997a8e8c583a.gif)
using System.Web.UI;
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030196/6810355c2f78c12e91b7997a8e8c583a.gif)
using System.Web.UI.WebControls;
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030196/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030196/6810355c2f78c12e91b7997a8e8c583a.gif)
namespace Samples.AspNet.CS.Controls
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/1327ab569c1ae82736693a50b8e33378.gif)
...{
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
[
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
DefaultProperty("Email"),
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
//true:把包含在服务器控件标记内的元素解释为Text属性 (Property)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
//false:解释为控件
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
ParseChildren(true, "Text"),
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
ToolboxData("<{0}:MailLink runat="server"> </{0}:MailLink>")
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
]
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
public class MailLink : WebControl
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/7ff8d92cded7e0ce15e7ca1acc870052.gif)
...{
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
//默认输出标记为span
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
//更改方法一
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
//public MailLink()
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
// : base(HtmlTextWriterTag.A)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
//{ }
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
[
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
Bindable(true),
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
Category("Appearance"),
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
DefaultValue(""),
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
Description("The e-mail address.")
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
]
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
public virtual string Email
![](http://imag<br/>4000<br/>es.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/7ff8d92cded7e0ce15e7ca1acc870052.gif)
...{
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
get
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/7ff8d92cded7e0ce15e7ca1acc870052.gif)
...{
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
string s = (string)ViewState["Email"];
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
return (s == null) ? String.Empty : s;
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/717446ca04a6125dc5b6b54e0fa14ab4.gif)
}
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
set
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/7ff8d92cded7e0ce15e7ca1acc870052.gif)
...{
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
ViewState["Email"] = value;
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/717446ca04a6125dc5b6b54e0fa14ab4.gif)
}
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/717446ca04a6125dc5b6b54e0fa14ab4.gif)
}
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
[
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
Bindable(true),
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
Category("Appearance"),
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
DefaultValue(""),
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
Description("The text to display on the link."),
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
Localizable(true),
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
//将Text属性定义为内部文本,默认属性
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
PersistenceMode(PersistenceMode.InnerDefaultProperty)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
]
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
public virtual string Text
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/7ff8d92cded7e0ce15e7ca1acc870052.gif)
...{
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
get
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/7ff8d92cded7e0ce15e7ca1acc870052.gif)
...{
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
string s = (string)ViewState["Text"];
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
return (s == null) ? String.Empty : s;
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/717446ca04a6125dc5b6b54e0fa14ab4.gif)
}
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
set
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/7ff8d92cded7e0ce15e7ca1acc870052.gif)
...{
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
ViewState["Text"] = value;
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/717446ca04a6125dc5b6b54e0fa14ab4.gif)
}
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/717446ca04a6125dc5b6b54e0fa14ab4.gif)
}
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
//方法二
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
protected override HtmlTextWriterTag TagKey
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/7ff8d92cded7e0ce15e7ca1acc870052.gif)
...{
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
get
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/7ff8d92cded7e0ce15e7ca1acc870052.gif)
...{
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
return HtmlTextWriterTag.A;
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/717446ca04a6125dc5b6b54e0fa14ab4.gif)
}
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/717446ca04a6125dc5b6b54e0fa14ab4.gif)
}
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
protected override void AddAttributesToRender(
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
HtmlTextWriter writer)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/7ff8d92cded7e0ce15e7ca1acc870052.gif)
...{
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
//base.AddAttributesToRender(writer);
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
writer.AddAttribute(HtmlTextWriterAttribute.Href,
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
"mailto:" + Email);
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/717446ca04a6125dc5b6b54e0fa14ab4.gif)
}
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
protected override void RenderContents(HtmlTextWriter writer)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/7ff8d92cded7e0ce15e7ca1acc870052.gif)
...{
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
if (Text == String.Empty)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/7ff8d92cded7e0ce15e7ca1acc870052.gif)
...{
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
Text = Email;
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/717446ca04a6125dc5b6b54e0fa14ab4.gif)
}
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
//进行html编码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
writer.WriteEncodedText(Text);
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/717446ca04a6125dc5b6b54e0fa14ab4.gif)
}
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/717446ca04a6125dc5b6b54e0fa14ab4.gif)
}
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/0196c3df5ea9e936f21e9932cca91014.gif)
}
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030196/6810355c2f78c12e91b7997a8e8c583a.gif)
以上MailLink类继承自 System.Web.UI.WebControls.WebControl
再来看一个MailLink2,它继承于System.Web.UI.Control
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030196/6810355c2f78c12e91b7997a8e8c583a.gif)
protected override void Render(HtmlTextWriter writer)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/1327ab569c1ae82736693a50b8e33378.gif)
...{
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
//先给标记添加样式和属性,然后再输出标记
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "red");
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
writer.AddAttribute(HtmlTextWriterAttribute.Href, "mailto:" + Email);
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
writer.RenderBeginTag(HtmlTextWriterTag.A);
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
writer.Write(Text);
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
writer.RenderEndTag();
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/0196c3df5ea9e936f21e9932cca91014.gif)
}
比较上面两段代码,执行结果一致,明显MailLink2的代码比较简洁也较为灵活(注意都是先添加样式和属性,再输出标记的)
但是在属性编辑器里面,MailLink控件有ForeColor等属性可供设置
而MailLink2控件是没有的
因为MailLink控件继承自WebControl
为什么继承自Control的MailLink2只需要重写Render方法呢
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030196/6810355c2f78c12e91b7997a8e8c583a.gif)
//RenderControl方法的基本实现
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030196/6810355c2f78c12e91b7997a8e8c583a.gif)
public void RenderControl(HtmlTextWriter writer)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/1327ab569c1ae82736693a50b8e33378.gif)
...{
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
if(Visible)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/7ff8d92cded7e0ce15e7ca1acc870052.gif)
...{
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
Render(writer);
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/717446ca04a6125dc5b6b54e0fa14ab4.gif)
}
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/0196c3df5ea9e936f21e9932cca91014.gif)
}
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030196/6810355c2f78c12e91b7997a8e8c583a.gif)
//Render方法基本实现
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030196/6810355c2f78c12e91b7997a8e8c583a.gif)
protected virtual void Render(HtmlTextWriter writer)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/1327ab569c1ae82736693a50b8e33378.gif)
...{
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
RenderChildren(writer);
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/0196c3df5ea9e936f21e9932cca91014.gif)
}
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030196/6810355c2f78c12e91b7997a8e8c583a.gif)
//RenderChildren方式基本实现
![](https://oscdn.geek-share.com/Uploads/Images/Content/2015/2015030196/6810355c2f78c12e91b7997a8e8c583a.gif)
protected virtual void RenderChildren(HtmlTextWriter writer)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/1327ab569c1ae82736693a50b8e33378.gif)
...{
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
foreach (Control c in Controls)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/7ff8d92cded7e0ce15e7ca1acc870052.gif)
...{
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/6a9c071a08f1dae2d3e1c512000eef41.gif)
c.RenderControl(writer);
![](https://oscdn.geek-share.com/Uploads/Images/Content/201104/717446ca04a6125dc5b6b54e0fa14ab4.gif)
}
![](https://oscdn.geek-share.com/Uploads/Images/Content/201109/0196c3df5ea9e936f21e9932cca91014.gif)
}
发现一个问题
不管是MailLink还是MailLink2控件都是读取标记之间的内容作为Text属性的
但是在属性编辑器中对Text属性进行赋值,标记之间不会写入任何东西。
这个以后再研究,先放着。
最后更正一个错误
MailLink中的AddAttributesToRender方法中的base.AddAttributesToRender(writer);不能删除掉
应该始终调用,作用就是将父类(WebControl类)的相关属性(ForeColor)添加到开始标记中去。
相关文章推荐
- asp.net2.0自定义服务器控件开发(一)
- 开发和使用自定义服务器控件
- 自定义服务器控件开发(1)
- ASP.NET2.0服务器控件之自定义状态管理
- ASP.NET2.0服务器控件开发之实现事件
- 演练:开发和使用自定义服务器控件
- ASP.NET2.0服务器控件开发之实现事件
- 演练:开发和使用自定义服务器控件
- 开发和使用自定义服务器控件
- 自定义服务器控件开发之1:重写的支持多验证TextBox控件
- 开发和使用自定义服务器控件(一)
- 自定义服务器控件开发之3:自定义缩略图和水印的图片上传控件
- ASP.NET2.0服务器控件开发之实现事件
- 自定义服务器控件开发之:文件上传控件
- 开发和使用自定义服务器控件
- 演练:开发和使用自定义服务器控件(摘自MSDN)
- 自定义服务器控件开发(3)--视图状态与控件状态
- 如何开发自定义 ASP.NET 服务器控件
- 如何开发自定义服务器控件
- 开发和使用自定义服务器控件