ASP.NET中的三个基类

开发 后端
本文向您介绍ASP.NET中的三个基类:Control,WebControl,CompositeControl,ASP.NET控件都是继承自这三个ASP.NET基类。

一般我们撰写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对像
责任编辑:冰荷 来源: it55
相关推荐

2009-08-04 17:42:23

DataSourceCASP.NET

2009-07-23 14:39:23

ASP.NET处理

2009-07-28 17:38:02

ASP.NET多态抽象基类

2009-07-30 08:49:58

ASP.NET中usi

2009-07-24 10:10:22

ASP.NET

2009-07-24 16:17:42

WebRequestEASP.NET

2009-07-29 13:57:53

创建SlideShowASP.NET

2009-07-30 13:07:49

ASP.NET中的三层

2009-08-05 18:17:16

ASP.NET控件开发基类

2009-07-20 15:19:52

ViewState本质ASP.NET

2009-07-20 14:54:23

HttpWorkerRASP.NET

2009-07-20 13:32:24

ScriptManagASP.NET

2009-07-30 12:35:51

ASP.NET中的对象

2009-07-23 16:20:48

HTTP协议ASP.NET

2009-09-11 09:09:00

ASP.NETAdRotator控件

2009-07-31 10:08:33

OutputCache

2009-07-30 13:28:55

ASP.NET中的ja

2009-07-30 13:30:56

ASP.NET开发模式

2009-08-04 17:30:23

cookieless属ASP.NET

2009-08-04 18:05:37

动态编译ASP.NET
点赞
收藏

51CTO技术栈公众号