一直对页面空间的呈现感到有些模糊,今天趁没事研究了一下!在Control类中包括三个用于实现控件呈
现的方法:Render、RenderChildren和RenderControl。它们都使用HtmlTextWriter的实例作为参数,它
们允许为一个HtmlTextWriter对象提供服务器控件的内容,并将其内容封装至HTTP输出流中输出到客户端
显示。
//RenderCotrol方法基本实现
public void RenderControl(HtmlTextWriter output)
...{
if(Visible)
...{
Render(output);
}
}
//Render方法基本实现
protected virtual void Render(HtmlTextWriter output)
...{
RenderChildren(output);
}
//RenderChildren方法基本实现
protected virtual void RenderChildren(HtmlTextWriter output)
...{
foreach(Control c in Controls)
...{
c.RenderControl(output);
}
}根据页面的加载过程我们可以分析出,这三个函数之间有递归的关系,大概的过程就是:
(1)页面框架建立一个HtmlTextWriter类的实例;
(2)页面框架将这个实例对象传递给RenderControl方法;
(3)RenderControl方法检查控件的可视属性Visible是否为true。如果为true,RenderControl方法将调用Render方法;如果为false,则不呈现该控件和其子控件;
(4)Render方法执行默认实现,调用RenderChildren方法;
(5)RenderChildren方法按照默认实现中的设定调用每个子控件的RenderControl方法;
本文解析了ASP.NET中控件的渲染流程,包括Render、RenderChildren和RenderControl方法的作用及其实现细节,展示了控件如何被转化为HTML并输出到客户端。
1046

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



