一般我们撰写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.
【编辑推荐】