ASP.NET中的三个基类

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

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

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


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

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

概念上理解就是:

1.控件开始呈现

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

3.呈现子控件

4.完成控件呈现

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

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

ASP.NET中的三层

2009-07-29 13:57:53

创建SlideShowASP.NET

2009-08-05 18:17:16

ASP.NET控件开发基类

2009-07-28 17:17:19

ASP.NET概述

2009-08-03 14:22:33

什么是ASP.NET

2009-07-30 13:28:55

ASP.NET中的ja

2009-07-20 13:32:24

ScriptManagASP.NET

2009-09-11 09:09:00

ASP.NETAdRotator控件

2009-07-31 10:08:33

OutputCache

2009-07-30 12:35:51

ASP.NET中的对象

2009-07-23 16:20:48

HTTP协议ASP.NET

2009-07-20 14:54:23

HttpWorkerRASP.NET

2009-07-20 15:19:52

ViewState本质ASP.NET

2009-07-30 13:30:56

ASP.NET开发模式
点赞
收藏

51CTO技术栈公众号