WebControl的Reading方法有Render,RendControl,RendChildren.
下面以Page类为例,(Page类也由Control类派生)

public void RenderControl(HtmlTextWriter writer)
...{
if(Visible)
...{
Render(writer);
}
}
protected virtual void Render(HtmlTextWriter writer)
...{
RenderChildren(writer);
}
protented virtual void RenderChildren(HtmlTextWriter writer)
...{
foreach(Control c in Controls)
...{
c.RenderControl(writer);
}
}
每一个页面都有一个控件树,代表页面所拥有的子控件,为 了生成控件树,页面需要建立一个HtmlTextWriter类的实例,这个实例封装了响应流,接着页面将这个HtmlTextWriter对象传递给RenderControl方法,RenderControl方法 检查控件地Visible属性是否为真,若为真,RenderControl调用自己的Render方法,Render方法默认的调用RenderChildren方法,RenderChidren方法又默认的调用这个控件的子控件的RenderControl方法,通过这种递归的调用,就可以生成控件树,除了Visble属性为假的控件,控件树种的控件都会最终生成,即生成Html,显示于浏览器。
本文详细解析了ASP.NET中页面的渲染过程,包括如何通过递归调用RenderControl方法生成控件树,并最终生成HTML代码展示在浏览器上。
2万+

被折叠的 条评论
为什么被折叠?



