web-dev-qa-db-ja.com

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

_ viewstart.cshtmlを使用して、自動的に同じRazor Layout をビューに割り当てています。

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

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

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

ただし、Razorpartialビューでは問題が発生します。ビューが_viewstart.cshtmlのコンテンツを実行するため、レイアウトが誤って割り当てられるため、ええ、もはや部分的ではありません。

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

Example project structure

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

@{
    Layout = "";
}

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

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

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

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

155
Portman

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

234
marcind