ASP.NET控件呈现方法的说明

翻译|其它|编辑:郝浩|2007-09-27 09:46:54.000|阅读 713 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

一般我们撰写  ASP.NET  控件都是继承  Framework  已有三个基类,Control,WebControl,CompositeControl,它们之间的关系大家都很清楚,下面我就各个基类的呈现方法作一些简单的说明:

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.
完成控件呈现

 

题外话:关于控件适配器我基本上没用过,不过可以学习这个手法,怎么样在一个类中添加新功能而不影响原代码,既  OO  的基本设计原则之一 优先使用组合。

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

  public virtual void RenderBeginTag(HtmlTextWriter writer)
         {
            this.AddAttributesToRender(writer);
            //
呈现  Tag  开始标记
        }

        protected override void Render(HtmlTextWriter writer)
         {
            //
重写了  Control    Render  方法并增加了三个扩展方法
            this.RenderBeginTag(writer);
            this.RenderContents(writer);
            this.RenderEndTag(writer);
        }
        protected internal virtual void RenderContents(HtmlTextWriter writer)
         {
            //
调用  Control  的呈现
            base.Render(writer);
        }

        public virtual void RenderEndTag(HtmlTextWriter writer)
         {
            //
呈现结束标记
        }

        protected virtual void AddAttributesToRender(HtmlTextWriter writer)
         {
            //
呈现  Attribute
        }


CompositeControl  
重写了  WebControl    Render(HtmlTextWriter writer),增加了设计时支持以创建子控件

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


以上是三个基类控件基本呈现过程。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:博客园

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP