二、服务器控件的呈现

控件呈现是指向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);
}
}
posted @ 2007-01-19 23:45  枫崖  阅读(252)  评论(0编辑  收藏  举报