zoukankan      html  css  js  c++  java
  • 二、服务器控件的呈现

    控件呈现是指向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);
    }
    }
  • 相关阅读:
    document.all还是document.getElementsByName
    B/S架构下软件开发技术参考
    "未将对象引用设置到对象的实例"异常的原因,请大家接下去 1、ViewState 对象为Unll。
    爱晚红枫的博客配色绿野仙踪
    适用于.text系统的博客皮肤Nature和purple
    XML数据岛,数据绑定
    【收藏①】17种正则表达式
    如何去除字符串中的多余空格?
    在NTFS分区中复制文件的同时如何复制权限
    我的后大学时代
  • 原文地址:https://www.cnblogs.com/yukun/p/625183.html
Copyright © 2011-2022 走看看