2011-06-08 11:36 runyl 博客园 我要评论(1) 字号:T | T

Control.Render 方法是将服务器控件内容发送到提供的HtmlTextWriter 对象,此对象编写将在客户端呈现的内容。本文主要介绍的就是ASP.NET中render方法,一起来看。

AD: 2013大数据全球技术峰会低价抢票中

Asp.net中所有的控件都是从System.Web.UI.Control类,在control类中定义了三个与呈现有关的方法,分别是Render方法,RenderChildren方法和RenderControl方法.其中RenderControl方法是public的方法,先看看这三个方法的实现:

  1. Public void RenderControl(HtmlTextWriter writer)
  2. {
  3. //判断Visible属性是否为真,如果是,则调用Render方法呈现控件,否则不呈现控件
  4. if(Visible)
  5. {
  6. Render(writer);
  7. }
  8. }
  9. Protected virtual void Render(HtmlTextWriter writer)
  10. {
  11. //在这里写呈现控件本身的代码
  12. …….
  13. //调用RenderChildren方法呈现该控件的子控件
  14. RenderChildren(writer);
  15. }
  16. Protected virtual void RenderChildren(HtmlTextWriter writer)
  17. {
  18. //循环调用每个子控件中的RenderControl方法呈现子控件,递归实现呈现整个页面的控件树
  19. foreach(Control c in Controls)
  20. {
  21. c.RenderControl(writer);
  22. }
  23. }

RenderControl方法用于供外部类进行调用,以生成控件,如父控件调用子控件的Rendercontrol方法.在RenderControl方法只是作了是否显示该控件的判断,如果显示则调用控件的被保护方法Render.

Render方法是呈现控件的核心方法,在现实性自定义控件中,我们一般都是通过重写Render方法来呈现控件的,如果控件是一个容器控件,就要重写RenderChildren方法来呈现子控件.

所有的服务端控件都是从System.Web.UI.WebControl中派生.而WebControl又从Control中派生,所以WebControl具有上述的三个方法,但是又增加了几个方法,它把Render方法又细分成三个方法:RenderBgeginTag,RenderContents,RenderEndTag.Render的实现代码如下:

  1. Protected override void Render(HtmlTextWriter writer)
  2. {
  3. //呈现开始标签
  4. RenderBgeginTag(writer);
  5. //呈现标签的内容
  6. RenderContents(writer);
  7. //呈现结束标签
  8. RenderEndTag(writer);
  9. }
  10. Public virtual void RenderBeginTag(HtmlTextWriter writer)
  11. {
  12. //调用AddAttributesToRender方法,添加标签的属性
  13. AddAttributesToRender(writer);
  14. //判断呈现的标签是否为已知的标签;
  15. HtmlTextWriterTag tagkey=TagKey;
  16. If (tagkey!=HtmlTextWriterTag.Unknown)
  17. {
  18. Writer.RenderBeginTag(tagkey);
  19. }
  20. Else
  21. {
  22. //未知标签,则使用指定的标签名TagName属性
  23. Writer.RenderBeginTag(this.TagName);
  24. }
  25. }
  26. Protected virtual void RenderContents(HtmlTextWriter writer)
  27. {
  28. //如果要呈现子控件,就要调用基类的Render方法
  29. base.Render(writer);
  30. }

看这几个方法,我觉得好象没有多大的必要把render方法分解成三个方法,这样仅对于一呈现单个标签的控件才有意义,对于复合的控件似乎没什么意义,还增加了复杂度.

总结:

1.如果从Control中派生,则应重载Render()方法呈现控件.如果控件是一个容器控件,则应在render方法中调用基类的base.RenderChildren()方法,呈现子控件.

2.如果从Webcontrol类中派生,分两种情况,一种是利用TagKey属性生成输出的html标签,这时应重载RenderContents()方法来呈现控件.第二种是不想呈现默认的的用TagKey生成的html标签,这时应重载Render()方法来呈现控件,如下代码所示:

  1. Protected virtual void Render(HtmlTextWriter writer)
  2. {
  3. //在这里写呈现控件本身的代码
  4. AddAttributesToRender(writer);
  5. RenderContents(writer);
  6. }
  7. Protected virtual void RenderContents(HtmlTextWriter writer)
  8. {
  9. //呈现本控件代码
  10. ….
  11. //如果要呈现子控件,就要调用基类的Render方法
  12. base.Render(writer);
  13. }

3.如果从Webcontrol类中派生,并且该控件是一个容器控件,则应在RenderContents中调用base.Render()方法,以呈现子控件.

其他的两种方法,我们会在后续文章中介绍到。希望对你有帮助。

【编辑推荐】

  1. ASP.net的身份验证方式FORMS
  2. 大型高性能ASP.NET系统架构设计
  3. 使用ASP.NET操作IIS7中使用应用程序
  4. 详解ASP.NET MVC 3中View的变化
  5. ASP.NET控件10个最有用的属性详解

转载于:https://www.cnblogs.com/zhangchenliang/archive/2013/04/09/3009979.html

浅谈ASP.NET中render方法相关推荐

  1. 浅谈asp木马中自定义函数加密的解密

    现在市面上流传了N种asp的大马.就是常说的webshell.有什么全免杀版本,什么提权加强版本.但是其中很多shell都是加密的,而且存在一些后门. 很有可能同学了忙了半天入侵了一个站,是为别人忙活 ...

  2. 浅谈ASP.net中的DataSet对象

    在我们对数据库进行操作的时候,总是先把数据从数据库取出来,然后放到一个"容器"中,再通过这个"容器"取出数据显示在前台,而充当这种容器的角色中当属DataSet ...

  3. asp.net mvc 压缩html代码,浅谈ASP.NET中MVC 4 的JS/CSS打包压缩功能

    今天在使用MVC4打包压缩功能@Scripts.Render("~/bundles/jquery") 的时候产生了一些疑惑,问什么在App_Start文件夹下BundleConfi ...

  4. 浅谈工作/学习中找bug的思路_0_调试、try-catch以及打印报错信息和百度的方法、No default constructor for entity: com.gyf.bos.mod

    浅谈工作/学习中找bug的思路_0 文章目录 浅谈工作/学习中找bug的思路_0 调试.try-catch-以及打印报错信息和百度的方法 前言 描述 解决思路1 -- 检查移植的代码,细枝末节也不要忽 ...

  5. python程序调用写好的代码_扣丁学堂浅谈Python编程中NotImplementedError的使用方法...

    扣丁学堂浅谈Python编程中NotImplementedError的使用方法 2018-07-04 14:08:02 2559浏览 本篇文章扣丁学堂 Python编程中raise可以实现报出错误的功 ...

  6. 运用计算机优化教学的方法,浅谈计算机教学中多种教学方法优化运用.doc

    浅谈计算机教学中多种教学方法优化运用 浅谈计算机教学中多种教学方法优化运用 摘 要:每一种教学方法各有其优越性,也各有其局限性,正如一把钥匙不能打开所有的锁一样,所以对于不同特点的学生群体,不同特点的 ...

  7. 锁定计算机 背景图片,浅谈win7系统中电脑开机的背景图片修改方法

    在操作电脑中无奇不有,为了让电脑变得更有个性,特别用户就想改掉原有的经典的WINDOWS开机背景,换上自己喜欢的开机背景图片,在win7系统下对于怎么设置这个过程,下面豆豆来详细介绍下修改方法. 浅谈 ...

  8. mysql groupby having_浅谈sql语句中GROUP BY 和 HAVING的使用方法

    在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数, 例如SUM, COUNT, MAX, AVG等.这些函数和其它函数的根本区别就是它们一般作用在多 ...

  9. html 怪异模式,CSS_浅谈CSS编程中的怪异模式,怪异模式盒模型 今天学习了 - phpStudy...

    浅谈CSS编程中的怪异模式 怪异模式盒模型 今天学习了一下css3的box-sizing属性,顺便又温习了一下css的盒模型,最后觉得有必要对盒模型做一个全面整理. 先不考虑css3的情况,盒模型一共 ...

最新文章

  1. poj 2352 Stars 线段树(先建后查/边建边查)/树状数组三种方法思路详解,带你深入了解线段树难度⭐⭐⭐★
  2. 【转载】C#编码标准━━项目设置和项目结构
  3. 如何使得账户密码永不过期
  4. LeetCode二分法---C语言
  5. Netty与传统Server对比
  6. 使用threading多线程模块的demo
  7. 基于Token实现开放API接口签名验证
  8. 计算机平面设计培训学费,个旧计算机平面设计学校学费多少
  9. 无法使用安全密码身份验证登录到服务器,使用安全密码验证登录(SPA)”后为什么登录失败...
  10. 【BHOJ 女娲加农炮 |、||】贪心 | 优先队列 | 堆 | E
  11. 女子花2万元雇友人杀逝世女街坊
  12. 小米max3支持html吗,小米Max3这款手机是否有OTG功能,支持OTG鼠标和U盘吗?
  13. Windows系统的命令窗口
  14. 北大igem生物计算机,喜讯|北京大学iGEM团队在国际大赛中取得金牌
  15. 工业互联网2.0体系下的边缘计算和云计算
  16. IDEA如何设置为中文语言
  17. 奶爸日记6 - 室内电子游戏
  18. 中国残障人童话爱情电影剧本《奇缘奇恋》招募投资人
  19. 研发费用如何进行帐务处理呢?
  20. python爬虫——利用百度搜索引擎爬取所需图片

热门文章

  1. 讲座预告 | 全年最值得看的英仙座流星雨要来 如何一晚看上百流星
  2. 代码改动两三行,AI数据秒换隐身衣!隐私计算+AI?中科院博士实践分享一键切换...
  3. 这个对标苹果的微软实体店,开了十一年之后,现在要永久关闭了
  4. 【Flutter】如何写一个Flutter自动打包成iOS代码模块的脚本
  5. STM32F103--(二) GPIO实践
  6. 006-spring cloud gateway-GatewayAutoConfiguration核心配置-GatewayProperties初始化加载、Route初始化加载...
  7. java泛型中?和T有什么区别?
  8. RH124 章1 访问命令行 笔记
  9. linux下文件的压缩和解压缩
  10. CF Round #426 (Div. 2) The Useless Toy 思维 水题