注册通行证 用户名 密码
  • 文章投稿
  • 博客
  • 论坛
  • 设为首页
  • 加入收藏
jztop.com网络技术
  • 首页
  • | iT新闻
  • | 操作系统
  • | 组网建网
  • | 网络安全
  • | 程序开发
  • | 办公一族
  • | 工具软件
  • | 网页制作
  • | 多媒体制作
  • | 网吧技术
  • | 服务器
  • | 专题教程
Vista | 软件评测 | 系统备份 | 优化 | 进程 | 聊天 | 病毒 | Linux | 黑客 | 防火墙 | 数据库 | Web开发 | Java | Word | 游戏 | 32位开发 | 移动开发
当前位置:首页 > 程序开发 > 微软开发专栏 > ASP.NET 内容正文:ASP.NET服务器控件之RenderContents

ASP.NET服务器控件之RenderContents

发布时间:2006-05-29 00:16:06 来源:天极开发 网友评论 0 条
  下载本文源代码

  上一篇文章介绍了使用Control类的Render方法实现控件呈现的基本知识和示例应用。本文重点介绍另一种实现控件呈现的常用方法--使用WebControl类的RenderContents方法实现控件呈现。

  基础知识

  就服务器控件而言只存在两种情况:一种是具有外观可视化元素的控件,还有一种是不具有外观可视化元素的控件。如果需要开发的服务器控件包含可视化元素,那么多数情况下,建议开发人员创建继承自System.Web.UI.WebControls.WebControl基类的控件类。这种做法的主要原因是基于便捷性考虑。因为,WebControl类可提供服务器控件的部分与外观有关的公共属性、方法和事件等。通过该类定义的属性,可以控制服务器控件的外观和行为。例如,使用BackColor和ForeColor属性,可以分别控制服务器控件的背景色和前景颜色;在可以显示边框的控件上,可以通过设置BorderWidth、BorderStyle和BorderColor属性,控制边框宽度、边框样式和边框颜色;服务器控件的大小可以通过Height和Width属性来指定等等。如果控件基类是Control类,那么实现这些类似内容则非常繁琐。

  在使用WebControl基类实现控件呈现的过程中,必然要使用该类所提供的属性和方法等成员对象。这是读者需要重点掌握的内容。另外,对于该基类的构造函数也是不容忽视的。下面首先从WebControl的构造函数开始入手进行讲解,随后将说明常见的成员对象。

  WebControl类包括三个构造函数,它们都用于初始化WebControl类的新实例,然而它们之间还存在一些细小的差异。

  (1)protected WebControl ()

  该构造函数用于初始化表示Span HTML元素的WebControl类的新实例。通常情况下,开发人员并不直接调用此构造函数。相反,它通常由派生类的构造函数调用以将TagKey属性初始化为Span枚举值。在随后的示例中,将重写TagKey属性,从而调用此构造函数。

  (2)public WebControl (HtmlTextWriterTag tag)

  开发人员可使用此构造函数创建并初始化使用指定的System.Web.UI.HtmlTextWriterTag值的WebControl类的新实例。其中的参数tag表示HtmlTextWriterTag枚举值之一。可能读者对于HtmlTextWriterTag还不太熟悉。它是一个枚举类型,其枚举值多为HTML标记,例如,A、B、Bold、Button等等。

  (3)protected WebControl (string tag)

  使用此构造函数可创建并初始化使用指定的HTML标记的WebControl类的新实例。其中参数tag表示HTML标记。当使用该构造函数时一定要注意:不能直接调用此构造函数。相反,它通常由派生类的构造函数调用以初始化TagKey和TagName属性。

  在了解了WebControl类的构造函数之后,读者还必须了解WebControl类的一些常用属性和方法。下面列举了这些常用成员对象,它们对于实现控件呈现有着重要意义。

  (1)Attributes属性

  该属性用于获取与控件的属性不对应的任意特性(只用于呈现)的集合,其属性类型为AttributeCollection。

  (2)ControlStyle属性

  该属性用于获取服务器控件的样式,它是Style类型。ControlStyle属性封装WebControl类的所有外观属性,如BorderColor和Font。

  (3)TagKey属性

  该属性用于获取与此服务器控件相对应的System.Web.UI.HtmlTextWriterTag值,其属性类型为HtmlTextWriterTag枚举。

  (4)protected virtual void AddAttributeToRender(HtmlTextWriter writer);

  该方法将需要呈现的HTML属性和样式添加到指定的System.Web.UI.HtmlTextWriter中。注意在重写过程中,一定要调用基类中相应的方法。

  (5)public void ApplyStyle(Style s);

  该方法将指定样式的所有非空白元素复制到控件,改写控件的所有现有的样式元素。

  (6)public void MergeStyle(Style s);

  该方法将指定样式的所有非空白元素复制到控件,但不改写该控件现有的任何样式元素。

  (7)protected override void Render(HtmlTextWriter writer);方法

  该方法重写了Control.Render。

  (8)protected virtual void RenderContents(HtmlTextWriter writer);

  该方法将控件的内容呈现到指定的编写器中。如果要在控件的标签中写入文本或其他内容,则需要重写该方法;如果要使用默认逻辑来呈现子控件,那么一定要调用基类中相应的方法。

  可能读者已经注意到WebControl基类中包括的两个方法:Render和RenderContents。根据上文所介绍的内容可知,Control基类中包括Render方法。由于WebControl类继承自Control类,因此,WebControl类中包含Render方法是无可非议的。然而,WebControl类中却有一个RenderContents方法,并且该方法与Render方法在功能、参数等方面都非常相似。那么在呈现控件过程中到底应该使用哪一个呢?

  实际上,在通常情况下,如果服务器控件自WebControl基类派生,那么其中的Render方法很少使用,而主要使用RenderContents方法实现控件呈现。为了说明其中的原因,我们必须了解WebControl基类中Render方法的实现逻辑。

  在WebControl基类中的Render方法的实现示意性代码如下所示:

protected override void Render(HtmlTextWriter output)
{
 RenderBeginTag(output);
 RenderContents(output);
 RenderEndTag(output);
}

  在WebControl基类中的RenderBeginTag方法的实现示意性代码如下:

public virtual void RenderBeginTag(HtmlTextWriter output)
{
 AddAttributesToRender(output);
 HtmlTextWriterTag tagKey = TagKey;
 if(tagKey != HtmlTextWriterTag.Unknown)
 {
  output.RenderBeginTag(tagKey);
 } else {
  output.RenderBeginTag(this.TagName);
 }
}

  在WebControl基类中的RenderContents方法的实现示意性代码如下:

protected override void RenderContents(HtmlTextWriter output){
 //使用默认逻辑来呈现子控件,那么一定要调用基类中的方法。
 base.Render(output);
}

  分析以上代码可以得出以下结论:

  一、为了在由WebControl派生的类中实现控件呈现,必须重写AddAttributesToRender、RenderBeginTag、RenderEndTag、RenderContents等方法中的一个或者多个,而不必重写Render方法。

  二、重写AddAttributesToRender、RenderBeginTag、RenderEndTag、RenderContents等方法非常重要(请注意重写这些方法的条件及注意事项),否则服务器控件可能会出现丢失标签的情况,这将严重影响服务器控件的呈现。

  三、当呈现服务器控件标签中的内容时,必须重写RenderContents方法。

  上文介绍了WebControl类的一些基本知识。尤其是对于上文所列举的示意性代码需要重点理解。这对于实现控件呈现有着重要作用。
 1/2    1 2 ›› ›|
相关文章
  • ASP.NET2.0服务器控件之Render方法
  • ASP.NET 2.0配合MasterPage的优化CSS
  • 在ASP.Net 2.0中实现多语言界面的方法
  • ASP.NET 2.0移动开发入门之基础
  • ASP.NET2.0服务器控件之创建自定义控件
【评论】【收藏本文】【打印】【关闭】
上一篇文章:ASP.NET2.0服务器控件之Render方法
下一篇文章:ASP.NET中动态控制RDLC报表
讨论区
查看
已有 0 位对此新闻感兴趣的网友发表了看法
匿名发表
注册通行证 登陆
图文阅读推荐
推荐阅讯
  • .NET 2.0 SqlDependency快速上手指南
  • ASP.Net的Application
  • 用ASP.NET 2.0实现AJAX风格的Web开发
  • ASP.NET 2.0中实现跨页面提交
  • 用ASP.NET 2.0设计网络在线投票系统
  • ASP.NET2.0数据库入门之SQL Server
  • ASP.NET2.0服务器控件之Render方法
  • 编写ASP.NET应用程序的十大技巧
  • 在ASP.NET 2.0中实现异常管理
  • ASP.NET数据库编程之Access连接失败
阅读排行
  • 1.用ASP.NET 2.0设计网络在线投票系统
  • 2.在ASP.Net 2.0中实现多语言界面的方法
  • 3.轻松加密ASP.NET 2.0 Web程序配置信息
  • 4.在ASP.NET中使用AJAX的简单方法
  • 5..NET 2.0中的企业库异常处理块简述
  • 6.面向.NET开发人员的Ajax 技术平台策略
  • 7.揭开ASP.NET中Cookie编程的奥秘
  • 8.ASP.NET2.0服务器控件之创建自定义控件
  • 9.ASP.NET2.0中Gridview中数据操作技巧
  • 10.ASP.NET 2.0发送电子邮件全面剖析之二
专题教程
  • 大话G游 专题:手机病毒揭密
  • ARP攻击防范与解决方案 路由故障处理手册
  • Picasa中文版_Picasa教程 专题:清除流氓软件
  • Firefox专题 seo搜索引擎优化专区
  • 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
  • 杀毒软件反被病毒杀 连"救命"都不能喊
  • 金山ARP防火墙
  • 还原卡神话破灭“机器狗”病毒来势汹汹
  • cctv经济半小时:你的手机现在安全吗?
  • 新挂马方式开始流行 ARP挂马称雄局域网
  • 木马和病毒清除的通用解法
  • IP地址不再冲突 查找ARP攻击者元凶
  • 教你几招识别和防御Web网页木马
  • 分析:封杀BT只是暂时的止痛药
  • QQ爆危险漏洞,“QQ游戏邀请大盗”邀请你玩病
关于我们 | 诚聘英才 | 联系我们 | 版权声明 | 网站大事 | 网站地图 | 意见建议
CopyRight 2005-2007 Jztop.Com 版权所有 未经许可 请勿转载