惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
博客园 - 三生石上(FineUI控件)
量子位
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
爱范儿
爱范儿
V
Visual Studio Blog
雷峰网
雷峰网
T
Tailwind CSS Blog
宝玉的分享
宝玉的分享
Blog — PlanetScale
Blog — PlanetScale
有赞技术团队
有赞技术团队
博客园 - 叶小钗
Microsoft Azure Blog
Microsoft Azure Blog
T
The Blog of Author Tim Ferriss
U
Unit 42
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
小众软件
小众软件
阮一峰的网络日志
阮一峰的网络日志
Y
Y Combinator Blog

博客园 - 程序人生-123

如何科学设计自己的网站网页 如何利用Visual Studio创建自己的模板 网页设计中的页面尺寸标准 javascript小技巧之大全集 网页META属性简介 CSS和JavaScript标签对照表 网站页面设计中的Css十大注意 网站压力测试 页面跳转 XHTML DHTML SHTML的区别 交换机路由器的组网 色彩搭配——网页设计技巧 怎样设计网页 Ping命令技巧 IE6、IE7、IE8共存方法 MOSS 对象模型的简单开发 开始→运行→命令集锦 using关键字的用法以及作用 SharePoint Designer 的利与弊
自定义服务器控件开发
程序人生-123 · 2008-03-28 · via 博客园 - 程序人生-123

1:呈现服务器控件

如果控件要呈现用户界面元素或者任何其他客户端可见的元素,则应从WebControl类派生该控件。如果控件要呈现在客户端浏览器中不可见的元素(如隐藏元素或 meta元素),则应从 Control 派生该控件。Control最重要的方法是Render方法,它允许为一个HtmlTextWriter对象提供服务器控件的内容。HtmlTextWriter类将字符和文本写入到ASP.NET服务器控件输出流。其主要的方法如下:

方法

说明

AddAttribute

对于HtmlTextWriter对象通过对RenderBeginTag方法的后续调用创建的元素,向其开始标记中添加指定的标记属性和值。

WriteStyleAttribute

向其开始标记中添加标记样式属性

WriteAttribute

将标记属性及其值写入到输出流

RenderBeginTag

将标记元素的开始标记写入输出流

RenderEndTag

将标记元素的结束标记写入输出流

WriteBeginTag

将任何制表符间距和指定标记元素的开始标记写入到输出流

WriteEndTag

写入指定的标记元素的任何制表间距和结束标记。

当用WebContent类来派生类的时候,可以使用RenderBeginTagRenderEndTag来写HTML的开始和结束标记,这时我们应该重写RenderContents方法来向服务器控件的输出流中写文本,不要使用Render方法实现,这是因为WebControlRender方法实现了一段程序,这段程序向外部提供带有样式信息的标签。

下面用一个简单的例子说明一下,创建了一个在浏览器上呈现超链接的服务器控件。

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