158

_viewstart.cshtmlを使用して、同じ Razor レイアウトをビューに自動的に割り当てています。

これは、Views フォルダーのルートにある非常に単純なファイルで、次のようになります。

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

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

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

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

プロジェクト構造の例

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

@{
    Layout = "";
}

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

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

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

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

4

1 に答える 1

239

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

于 2010-11-02T21:23:57.463 に答える