2011-10-31 15 views
18

私はレイアウトページとそれを使用するいくつかのページを持っています。しかし、私はそれを使用するいくつかのサブページにナビゲーションコントロールを実装したいと思います。だから私は別のネストされたレイアウトページを使用したい。これは可能ですか?別のものを参照するためにMVC 3に2つ以上の_Layoutページを/チェーンすることはできますか? cshtmlページのために?

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

あなただけの_Layout.cshtmlでこのセクションを追加することができます。

答えて

30

はい、素晴らしいです。レイアウトページで別のレイアウトページを使用するように指示するだけです。

@{ Layout = "pathToMyOtherLayout"; } 

セクションを使用して、親レイアウトにパススルーすることもできます。たとえば:あなたは空白のビューの束にナビゲーションの上書きを繰り返して気にしないとき

@Section Headers {@RenderSection("Headers")} 
+2

セクションを通過するための詳細は、私が必要としていたものでした - ありがとう。 – Liam

9

あなたはあなたのようなチェーンのページが_ViewStart.cshtmlにあなたがレイアウトページが定義されているどのように表示され、ページを習得することができますすることができます親に追加するか、個々のビューに追加して別のレイアウトビューを参照します。

ScottGuが、私は任意の気晴らし(ナビゲーションなどをしたくない、私はあなたがチェックアウトの過程にあるいくつかのeコマースサイトで、上およそ話している何のためにこの正確な方法を使用しRazor Layouts

詳細とポストを持っています)ビュー内に特別なケースがある代わりに、if checkoutのレイアウトでは、LayoutBrandingOnlyLayoutを「継承」するので、すべてのブランドHTMLを繰り返す必要はありません。

1

セクションを使用すると、1つのレイアウトページでこれを簡単に解決できます。 チェックhttp://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

+1

は、これはokです。しかし、あなたが微妙に異なるレイアウトを必要とするビューのフォルダ全体を持っている場合、レイアウトを使用して "継承"は少しクリーナーであり、あなた自身を繰り返さないように助けます。 –

+2

大規模なプロジェクトで継承がより洗練されていることに同意しますが、どちらの方法でも、ビュー内で平均ビューとは異なるものを示すものを維持する必要があります。ナビゲーションパーミッションのオーバーライドは、ビュー内で実際に何が起こっているのかを、複数の継承レベルを使用するよりも多少役立ちます。レイアウトを定義するために非常にわかりやすいロングネームを使用しない限り、その情報をトラッキングしなくても継承連鎖 – benjamin

+0

良い点、状況的な使用は間違いなく –

関連する問題