首言

ASP.NET控件基本上都是继承Framework 已有三个基类,Control,WebControl,CompositeControl下面我就各个基类的呈现方法
      讲述
Control,WebControl, CompositeControl各自的呈现过程。
   

第一个:Control呈现过程。

Control所继承的控件的输出流程:

在正常的控件呈现输出(就是说不是ajax控件里,ajax会打乱此图)中,它是一个循环调用的过程,看看下面的图就知道了.net控件开发(五)之 深入理解控件的呈现原理
 

现在来分析分析其实现过程,在Render方法中调用另外一个名为RenderChildren的受保护成员,

该方法接收服务器控件内容的 HtmlTextWriter对象.

.net控件开发(五)之 深入理解控件的呈现原理protected internal virtual void Render(HtmlTextWriter writer)

.net控件开发(五)之 深入理解控件的呈现原理protected internal virtual void RenderChildren(HtmlTextWriter writer)

 

在此,我们什么时候给了this._occasionalFields赋值了呢。赋了什么值呢。当加入到控件树上时(使用了findControl查找控件),它会调用一个


private void EnsureNamedControlsTable
方法(这个方法在
findControl中调用)去确保所有控件都被正确加载完成。
然后将其填充在一个控件集中
this.FillNamedControlsTable(thisthis._occasionalFields.Controls);,
从这里开始注意了,Ajax异步回调与正常输出的控件是从这里开始分岐的。
 1.net控件开发(五)之 深入理解控件的呈现原理internal void RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
 2
 

接下来就是真正呈现过程的入口方法

.net控件开发(五)之 深入理解控件的呈现原理//该方法为入口方法
.net控件开发(五)之 深入理解控件的呈现原理
public virtual void RenderControl(HtmlTextWriter writer)

下面这段代码,这个是一个过渡代码,其中的this.flags[0x10]没有搞明白是什么一回事,但不要紧。
它都会去调用
 RenderControlInternal方法

下面代码。控件是否有相关的呈现适配器,有的话就适配器调用适配器的相关呈现方法
.net控件开发(五)之 深入理解控件的呈现原理private void RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
     理解就是:
1.
控件开始呈现
2.
控件是否有相关的呈现适配器,有的话就适配器调用适配器的相关呈现方法
3.
呈现子控件
4.
完成控件呈现

 

第二个:WebControl呈现过程

WebControl:Control的基础上增加了Style,呈现方面就是在Render(HtmlTextWriter writer) 方法中扩展了三个呈现方法,增加一个属性呈现方法

流程图如下:
.net控件开发(五)之 深入理解控件的呈现原理
伪代码如下:
    

.net控件开发(五)之 深入理解控件的呈现原理  public virtual void RenderBeginTag(HtmlTextWriter writer)
        }

 

 

第三个:CompositeControl呈现过程

   CompositeControl类是一个抽象类,为自定义控件提供命名容器和控件设计器功能,该自定义控件包含全部子控件或使用其他控件功能。此类由Login Wizard 等控件继承

复合控件类必须派生自System.Web.UI.WebControls.CompositeControl类。这一点与ASP.NET 1.x环境下开发复合控件有些不同。在ASP.NET 1.x中,复合控件必须实现System.Web.UI.INamingContainer接口。然而,在ASP.NET 2.0下,复合控件类的基类则发生了变化

.net控件开发(五)之 深入理解控件的呈现原理public abstract class CompositeControl : WebControl, INamingContainer, ICompositeControlDesignerAccessor

  其余使用以后再讲,今天主要是讲其呈现过程;

CompositeControl 重写了WebControlRender(HtmlTextWriter writer),增加了设计时支持以创建子控件.net控件开发(五)之 深入理解控件的呈现原理  

 protected internal override void Render(HtmlTextWriter writer)
        
{
            
//如果在设计时,创建子控件,也就是在设计时增加友好体验
            if (DesignMode)
                   
this.EnsureChildControls();
            
base.Render(writer);
        }

————————————————————————————————————

后述:

.net控件开发系列文章

1.net组件开发系列()之武术系列-----------马步功   之基本功
2.
net组件开发系列()之武术系列--------太极拳 开发ajax控件
3.
.net组件开发系列之武术系列武术招数控件生命周期与控件事件机制
4.
.net控件开发系列事件处理机制三个接口两个方法


相关文章:

  • 2022-12-23
  • 2021-11-17
  • 2021-07-18
  • 2021-11-10
  • 2022-02-03
  • 2021-11-09
猜你喜欢
  • 2022-01-28
  • 2021-07-04
  • 2022-01-26
  • 2022-02-09
  • 2021-05-29
相关资源
相似解决方案