图1效果图
如图1所示,该服务器控件呈现了一个超链接,并且设置了文本为红色。当用户单击红色文字时,页面将转向微软站点。当然,用户可以通过属性LinkUrl来设置超链接地址。
下面列举了示例实现源代码。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace UsingRenderControl { [DefaultProperty("LinkUrl")] [ToolboxData("<{0}:RenderControl runat=server></{0}:RenderControl>")] public class RenderControl : Control { // 实现LinkUrl [Bindable(true)] [Category("Appearance")] [DefaultValue("http://localhost/")] [Localizable(true)] public string LinkUrl { get { String s = (String)ViewState["LinkUrl"]; return ((s == null) ? String.Empty : s);} set { ViewState["LinkUrl"] = value; } } // 重写Render方法 protected override void Render(HtmlTextWriter writer) { writer.AddAttribute(HtmlTextWriterAttribute.Href, LinkUrl); writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "red"); writer.RenderBeginTag(HtmlTextWriterTag.A); writer.Write("浏览网站"); writer.RenderEndTag(); } } } 如上代码实现了自定义服务器控件类RenderControl。该类从Control基类继承,具体实现了表示超链接地址的LinkUrl(默认值为),并重写了Render方法。在重写Render的过程中,调用了一些HtmlTextWriter类成员,例如,Writer、AddAttribute、AddStyleAttribute、RenderBeginTag和RenderEndTag方法等。另外,可能开发人员在使用Writer方法过程中,需要呈现一个比较长的字符串。建议此时多多使用Writer方法,而不要使用字符串级联或者StringBuilder类的相关方法进行实现。因为,那样将会消耗大量的系统时间和内存,效率较低。 可能有一些读者会问,如果将服务器控件呈现的多行代码的顺序变化一下,是否会有什么不同呢?例如,假设首先依次应用RenderBeginTag、Write、RenderEndTag方法,然后再调用AddAttribute和AddStyleAttribute方法,那么会显示相同的效果吗?答案是否定的。这里需要强调的是:在呈现控件的过程中,首先要定义服务器控件的属性和CSS样式等内容,然后再定义服务器控件的主体内容,这种顺序不能改变的。
另外,如果读者感兴趣可以在代码中实现一个Text属性,用于获取或者设置控件所显示的文本。这样,在Render方法中,使用Write方法输出的"浏览网站"文字内容则可由Text属性代替。
下面列举了为使用以上的自定义服务器控件,而创建的Default.aspx文件源代码。
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <%@ Register TagPrefix="Sample" Assembly="UsingRenderControl" Namespace="UsingRenderControl" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>使用Render方法实现控件呈现</title> </head> <body> <form runat="server"> <div> <Sample:RenderControl runat="server" LinkUrl="http://www.microsoft.com/"> </Sample:RenderControl> </div> </form> </body> </html> 以上代码比较简单,其中主要声明了自定义服务器控件RenderControl,并设置其LinkUrl属性值为,即微软站点地址。
当用户在浏览器中运行以上页面,并查看相关的Html源文件时,可得到如下的代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title> 使用Render方法实现控件呈现</title> </head> <body> <form method="post" action="Default.aspx"> <div> <input type="hidden" value="/wEPDwUJNzMyMTY5NTU2ZGQQYrLd/G+vm1h41r2CEkxID63o5g==" /> </div> <div> <a href="http://www.microsoft.com/">浏览网站</a> </div> </form> </body> </html> 通过观察以上代码可知,自定义服务器控件RenderControl实际呈现的结果是粗体所示部分的代码,其最终呈现为一个表示超链接的<a>标记。
小结
本文首先介绍了HtmlTextWriter类的基本知识,然后讲解了使用Render方法实现控件呈现的应用。在随后的一篇文章中,笔者将说明另外一种实现控件呈现的方法。从服务器控件开发技术总体而言,控件呈现技术是开发过程中最为常用,也是最为简单的内容。建议读者能够熟练掌握其中的内容。 (编辑:焦作站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|