这里关键是对于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}
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方法的实现如下:2{
3 RenderBeginTag(output);
4 RenderContents(output);
5 RenderEndTag(ouput);
6}
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实现如下: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}
protected internal virutal void RenderContents(HtmlTextWriter outpus)
{
base.Render(output);
}
}