• 二、服务器控件的呈现


    控件呈现是指向HTTP输出流中写入标记文本的过程。
    这里关键是对于HTMLTextWriter的使用,好好看MSDN 吧
    这里我想说的是对于使用Control类的呈现方法
    该类提供了三种用于实现控件呈现,Render、RenderChildren、RenderControl,均使用HtmlTextWriter的实例作为参数,三个方法看上去好像是独立的3个方法 ,其实不然,下面的代码可以说明三者的关系
     1public void RenderControl(HtmlTextWriter output)
     2{
     3  if(Visible)
     4{
     5  Render(output);
     6}

     7}

     8
     9
    10public virtual void Render(HtmlTextWriter output)
    11{
    12  RenderChildren(output);
    13}

    14
    15public virtual void RenderChildren(HtmlTextWriter output)
    16{
    17  foreach(Control c in Controls)
    18{
    19  c.RenderControl(output);
    20}

    21}

    因此对于了解这个很重要,下面有一个我写的一小段程序,可以帮助您理解他,这里是下载文件RenderControl
    二、WebControl类的呈现方法
     
       如果您开发的控件包含可视化元素,多数情况下使用由基类System.Web.UI.WebControls.WebControl派生。
              WebControl基类中存在两个方法Render 和RenderContents,通常情况下控件由WebControl派生,主要适用RenderContent实现呈现,很少使用Render,在WebControl中Render的实现如下:
    1protected override void Render(HtmlTextWriter output)
    2{
    3  RenderBeginTag(output);
    4  RenderContents(output);
    5  RenderEndTag(ouput);
    6}
    在WebControl基类中的RenderBeginTag方法的实现如下:
     1public virtual void RenderBeginTag(HtmlTextWriter output)
     2{
     3  AddAttributesToRender(output);
     4  HtmlTextWriterTag tagKey=TagKey;
     5  if(tagKey!=HtmlTextWriterTag.Unknown)
     6{
     7  output.RenderBeginTag(tagKey);
     8}

     9else
    10{
    11  output.RenderBeginTag(this.TagName);
    12}

    13}
    RenderContents实现如下:
    protected internal virutal void RenderContents(HtmlTextWriter outpus)
    {
      base.Render(output);
    }
    }
  • 相关阅读:
    图解+代码|常见限流算法以及限流在单机分布式场景下的思考
    Kafka处理请求的全流程分析
    Kafka索引设计的亮点
    从0到1搭建大数据平台之调度系统
    从0到1搭建大数据平台之计算存储系统
    如何设计数据中台
    Vertica的这些事<十>—— vertica中group by 和join 语句的优化
    Vertica的这些事<七>—— VSQL常用命令
    Vertia的这些事<一>—— 关于vertica的常用操作
    Vertica的这些事(十五)——Vertica报错TM
  • 原文地址:https://www.cnblogs.com/yukun/p/625183.html
Copyright © 2020-2023  润新知