3

在 ASP.NET MVC 3 Razor 中,您可以指定页面标题:

@{
    ViewBag.Title = "Title";
}

现在,假设我们有一个布局页面:

<title>@ViewBag.Title | Website</title>

当 ASP 渲染一个页面时,它需要输出一些布局页面 HTML,然后是视图 HTML,然后是布局页面的其余部分 HTML。

为了输出布局页面 HTML 的前半部分,ASP.NET 需要知道ViewBag.title视图中赋予的值。因此,ASP.NET 需要解析视图中的 Razor 代码。但是,ASP.NET 还不能输出视图的 HTML 代码,因为它仍在输出布局页面的 HTML 代码。那么 ASP.NET 是否将视图的 HTML 输出存储在缓冲区中?这似乎是一种不好的做法,但我想不出任何其他方法可以有效地将视图的标题放入布局页面输出中。

4

1 回答 1

6

当 ASP 渲染一个页面时,它需要输出一些布局页面 HTML,然后是视图 HTML,然后是布局页面的其余部分 HTML。

这就是呈现 Web 表单的方式。但是,由于您描述的问题(以及其他一些问题),mvc 会由内而外呈现。

所以内部视图首先渲染到一个临时缓冲区。然后是布局页面。这种渲染一直持续到到达最外面的布局页面,然后将缓冲区写入响应流并刷新。

这在 90% 的情况下(估计)不会导致任何问题,但是如果您需要及早刷新响应,这将导致头痛。

仅供参考,可以通过以下方式访问视图的缓冲区:

HtmlHelper.ViewContext.Writer

所以要回答你的问题,是的 - 它确实缓冲视图。

于 2012-05-30T11:46:42.723 回答