ASP.NET Web Form渲染引擎输出控件树?寻找有关渲染逻辑的信息。

3
我一直在观看Scott Hanselman教授MVC 2技巧/提示的视频。他提到,MVC 2默认使用ASP.NET Web Forms视图引擎来呈现视图的输出;他提到Web Forms视图引擎比MVC 2慢一点,因为它生成一个控件树,然后将HTML输出到页面上(我希望我说得对)。
我想知道他所说的Web Forms在输出HTML到页面之前生成代码树是什么意思。有没有人了解Web Forms的视图引擎以及ASP.NET和MVC2的渲染过程的步骤?
2个回答

1
在Web Forms中,HTML是由一系列控件生成的,每个控件都需要被调用以呈现其HTML,并且每个控件都会对页面ViewState做出贡献。此外,在Web Forms的生命周期中会触发许多事件(Init、PreRender等),并且层次结构中的每个控件也会触发类似的事件。
在MVC中,理论上过程可能要简单得多,因为您没有深层次的控件层次结构,没有ViewState,也不需要触发事件。但是,MVC“搭便车”于ASP.NET框架,因此在幕后,许多Web Forms内容仍然存在,尽管它们不是必需的。

1

ASP.Net WebForms 的建立是基于一个想法:在无状态的 HTTP 环境下“伪造”一个持久且有状态的模型。这个想法是为了让 WinForms 开发人员有一个熟悉的工作环境,例如控件、事件等等...

为了实现这个目标,会将标记解析为存在内存中的对象集合,你可以像操作 WinForms 控件一样引用它们:

TextBox.Text = "I hate viewstate!";

每个控件都被添加到一个控件集合中,该集合代表要发送回客户端的页面。当构建响应时,引擎遍历控件树集合,并要求每个控件将自己呈现到输出流中(Render itself)。结果就是您以HTTP响应形式获得的内容。

在MVC中,这是一个不必要的步骤,因为那些控件从未被引用。MVC拥抱Web的无状态特性,而是直接将发布的表单变量映射到模型(Controller Actions)中供使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接