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 に答える