_viewstart.cshtmlと部分的なRazorビューの正しい使い方は?


156

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

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

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

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

ただし、これはRazor パーシャルの問題を引き起こしますビューは_viewstart.cshtmlのコンテンツを実行し、レイアウトを誤って割り当てるため、ビューがビューではなくなるため引き起こします。

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

プロジェクト構造の例

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

@{
    Layout = "";
}

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

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

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

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


3
オフトピックで申し訳ありませんが、ファイル名の横にあるアイコンは何ですか?:)ある種のソース管理権?
Alex

6
@jitbit:VisualSVN
2011年

回答:


237

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


6
ああ、PartialViewResultクラスについて知りませんでした。それが私が必要としていたことです。
Portman

6
フォローアップとして、アクションメソッドの戻り値の型を通常のの代わりに明示的に設定する必要があることわかりました。PartialViewResultActionResult
ポートマン、

2
@Portmanアクションメソッドの戻り値の型がそうでないときに問題が発生していActionResultますか?この場合、MVCランタイムは異なる動作をするべきではない(つまり、アクションメソッドによって返される型ActionResultまたはそれから派生したクラスが機能する限り)ので、これが問題であることに驚いています。
2010年

@marcind戻り値の型をに設定すると、w3wp.exeでスタックオーバーフローが発生しActionResultます。戻り値の型がの場合、正常に機能しPartialViewResultます。接続のバグを報告する必要があると思いますか?
ポートマン、

私には1つのように聞こえます-Connectバグを送信した場合は、声をかけてください。投票してください。
Davは
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.