这里关键是对于HTMLTextWriter的使用,好好看MSDN 吧

这里我想说的是对于使用Control类的呈现方法
该类提供了三种用于实现控件呈现,Render、RenderChildren、RenderControl,均使用HtmlTextWriter的实例作为参数,三个方法看上去好像是独立的3个方法 ,其实不然,下面的代码可以说明三者的关系
1
public void RenderControl(HtmlTextWriter output)
2
{
3
if(Visible)
4
{
5
Render(output);
6
}
7
}
8
9
10
public virtual void Render(HtmlTextWriter output)
11
{
12
RenderChildren(output);
13
}
14
15
public virtual void RenderChildren(HtmlTextWriter output)
16
{
17
foreach(Control c in Controls)
18
{
19
c.RenderControl(output);
20
}
21
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

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

3

4

5

6

1
public virtual void RenderBeginTag(HtmlTextWriter output)
2
{
3
AddAttributesToRender(output);
4
HtmlTextWriterTag tagKey=TagKey;
5
if(tagKey!=HtmlTextWriterTag.Unknown)
6
{
7
output.RenderBeginTag(tagKey);
8
}
9
else
10
{
11
output.RenderBeginTag(this.TagName);
12
}
13
}
RenderContents实现如下:
2

3

4

5

6

7

8

9

10

11

12

13

protected internal virutal void RenderContents(HtmlTextWriter outpus)
{
base.Render(output);
}
}