ASP.NET中的三个基类
创始人
2024-04-19 01:11:19
0

一般我们撰写ASP.NET控件都是继承Framework 已有三个ASP.NET基类,Control,WebControl,CompositeControl,它们之间的关系大家都很清楚。

下面我就各个ASP.NET基类的呈现方法作一些简单的说明:


Control,主要有以下4个方法用于呈现:

  1. protected internal virtual void Render  
  2. (HtmlTextWriter writer)   
  3. {   
  4. this.RenderChildren();   
  5. }   
  6. protected internal virtual void   
  7. RenderChildren(HtmlTextWriter writer)   
  8. {   
  9. //呈现子控件   
  10. }   
  11. public virtual void RenderControl  
  12. (HtmlTextWriter writer)   
  13. {   
  14. //该方法为入口方法   
  15. this.RenderControl(writer,this.xxxAdapter);   
  16. }   
  17. protected void RenderControl(HtmlTextWriter   
  18. writer, ControlAdapter adapter)   
  19. {   
  20. if (adapter != null)   
  21. {   
  22. //调用相关的适配器方法   
  23. }   
  24. else   
  25. {   
  26. this.Render(writer);   
  27. }   
  28. } 整个呈现顺序就是:   
  29. 1.RenderControl(HtmlTextWriter writer)   
  30. 2.RenderControl(HtmlTextWriter writer,   
  31. ControlAdapter adapter)   
  32. 3.Render(HtmlTextWriter writer)   
  33. 4.RenderChildren(HtmlTextWriter writer)   

概念上理解就是:

1.控件开始呈现

2.控件是否有相关的呈现适配器,有的话就适配器调用适配器的相关呈现方法

3.呈现子控件

4.完成控件呈现

题外话:关于控件适配器我基本上没用过,不过可以学习这个手法,怎么样在一个类中添加新功能而不影响原代码,既OO的基本设计原则之一 优先使用组合。
 
WebControl:在Control的基础上增加了Style,呈现方面就是在Render(HtmlTextWriter writer) 方法中扩展了三个呈现方法,增加一个属性呈现方法, 伪代码如下:

  1. publicvirtualvoidRenderBeginTag  
  2. (HtmlTextWriterwriter)  
  3. {  
  4. this.AddAttributesToRender(writer);  
  5. //呈现Tag开始标记  
  6. }  
  7.  
  8. protectedoverridevoidRender(HtmlTextWriterwriter)  
  9. {  
  10. //重写了Control的Render方法并增加了三个扩展方法  
  11. this.RenderBeginTag(writer);  
  12. this.RenderContents(writer);  
  13. this.RenderEndTag(writer);  
  14. }  
  15. protectedinternalvirtualvoidRenderContents  
  16. (HtmlTextWriterwriter)  
  17. {  
  18. //调用Control的呈现  
  19. base.Render(writer);  
  20. }  
  21.  
  22. publicvirtualvoidRenderEndTag(HtmlTextWriterwriter)  
  23. {  
  24. //呈现结束标记  
  25. }  
  26.  
  27. protectedvirtualvoidAddAttributesToRender  
  28. (HtmlTextWriterwriter)  
  29. {  
  30. //呈现Attribute  
  31. }  
  32. CompositeControl重写了WebControl的Render  
  33. (HtmlTextWriterwriter),  
  34. 增加了设计时支持以创建子控件  
  35.  
  36. protectedinternaloverridevoidRender(HtmlTextWriterwriter)  
  37. {  
  38. //如果在设计时,创建子控件,也就是在设计时增加友好体验  
  39. if(DesignMode)  
  40. this.EnsureChildControls();  
  41. base.Render(writer);  
  42. }  

【编辑推荐】

  1. ASP.NET环境下的Shell函数
  2. 在ASP.NET中向数据库批量插入数据
  3. ASP.NET用Post方式向网页发送数据
  4. ASP.NET 2.0部署WEB应用程序浅析
  5. ASP.NET中的HttpWorkerRequest对像

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...