程序人生

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
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

posted on 2008-03-28 10:00  程序人生-123  阅读(312)  评论(0编辑  收藏  举报