154


31

_viewstart.cshtmlおよび部分的なRazorビューを使用する正しい方法は?

http://weblogs.asp.net/scottgu/archive/2010/10/22/asp-net-mvc-3-layouts.aspx[*_viewstart.cshtml*を使用して、同じRazorレイアウトを自動的に割り当てています私の見解。

これは、Viewsフォルダーのルートにある次のようなシンプルなファイルです。

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

これは、すべての単一のビューに@Layoutディレクティブを追加するよりもDRYです。

ただし、Razor * partial *ビューでは_viewstart.cshtmlのコンテンツを実行し、それによりレイアウトが誤って割り当てられ、ビューが部分的ではなくなるため、問題が発生します。

_viewstart.cshtmlファイル、共有_layout.shtmlファイル、および部分ビュー( "AnonBar.cshtml")を示す架空のプロジェクトを次に示します。

image:https://dl.dropbox.com/u/58785/RazorPartialViewstart.PNG [プロジェクト構造の例]

現在、これを回避する方法は、すべての部分ビューに次の行を追加することです。

@{
    Layout = "";
}

これは、Razorでビューをパーシャルとして表示する間違った方法のようです。 (Webフォームビューエンジンとは異なり、ファイル拡張子は部分ビューでも同じです。)

私が検討した他のオプションですが、それはさらに悪いです:

  • すべての部分ビューを共通フォルダーに入れて、共有できるようにします common _viewstart.cshtml。 これは、ビューがコントローラーと同じフォルダーにあるという慣例を破ります。

  • 部分ビューを使用していません。

これは、Razorビューエンジンチームによってまだ具体化されているものですか、それとも基本的な概念が欠けていますか?

1 Answer


233


( `return View()`の代わりに)コントローラから `PartialView()`を返す場合、 `_viewstart.cshtml`は実行されません。