如果控件要呈现用户界面元素或者任何其他客户端可见的元素,则应从WebControl类派生该控件。如果控件要呈现在客户端浏览器中不可见的元素(如隐藏元素或 meta元素),则应从 Control 派生该控件。Control最重要的方法是Render方法,它允许为一个HtmlTextWriter对象提供服务器控件的内容。HtmlTextWriter类将字符和文本写入到ASP.NET服务器控件输出流。其主要的方法如下:
方法 |
说明 |
AddAttribute |
对于HtmlTextWriter对象通过对RenderBeginTag方法的后续调用创建的元素,向其开始标记中添加指定的标记属性和值。 |
WriteStyleAttribute |
向其开始标记中添加标记样式属性 |
WriteAttribute |
将标记属性及其值写入到输出流 |
RenderBeginTag |
将标记元素的开始标记写入输出流 |
RenderEndTag |
将标记元素的结束标记写入输出流 |
WriteBeginTag |
将任何制表符间距和指定标记元素的开始标记写入到输出流 |
WriteEndTag |
写入指定的标记元素的任何制表间距和结束标记。 |
当用WebContent类来派生类的时候,可以使用RenderBeginTag和RenderEndTag来写HTML的开始和结束标记,这时我们应该重写RenderContents方法来向服务器控件的输出流中写文本,不要使用Render方法实现,这是因为WebControl的Render方法实现了一段程序,这段程序向外部提供带有样式信息的标签。
下面用一个简单的例子说明一下,创建了一个在浏览器上呈现超链接的服务器控件。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
namespace Sunfish.Controls
{
public class MyLinkControl : WebControl
{
Color color = Color.Blue;
///<summary>
///链接文本颜色
///</summary>
public Color LinkColor
{
get { return color; }
set { color = value; }
}
string hyperLink = "http://www.163.com";
///<summary>
///链接地址
///</summary>
public string HyperLink
{
get { return hyperLink; }
set
{
if (value.IndexOf("http://") == -1)
{
throw new Exception("Specify Http as the protocal");
}
hyperLink = value;
}
}
string text = "网易";
public string Text
{
get { return text; }
set { text = value; }
}
int fontSize = 20;
public int FontSize
{
get { return fontSize; }
set { fontSize = value; }
}
protected override void RenderContents(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Href, hyperLink);
writer.AddStyleAttribute(HtmlTextWriterStyle.FontSize, fontSize.ToString());
writer.AddStyleAttribute(HtmlTextWriterStyle.Color, ColorTranslator.ToHtml(color));
writer.RenderBeginTag(HtmlTextWriterTag.A);
writer.Write(text);
writer.RenderEndTag();
}
}
}
转自:http://www.cnblogs.com/sunfishlu/archive/2008/03/27/1125699.html