2016-08-02 3 views
4

私が所有している/作成したRazorビューのレイアウトパスを手動で指定する必要がなくなりました。私は私のことができるようにするのが大好きだしたすべての私のコントローラが継承されているベースコントローラを、持っている剃刀ビューでレイアウトパスを指定せずにグローバルMVCレイアウトを指定する方法

@{ 
    ViewBag.Title = "About Us"; 
    Layout = "~/Views/Shared/_ContentLayout.cshtml"; 
} 

:かみそりビューでそう

、あなたは、通常のようなビュー/レイアウトプロパティを指定しますこのレベルのレイアウトを指定するか、あるいはapp_startなどで指定します。

これ以外にも、ビュー自体でこれをオーバーライドします。

広範な検索の後で、私はまだこれを行うことができる誰かの証拠を見いだせませんでした。

私の現在、次善の問題を回避するには、動的な、それを維持するために、ViewBagでこれを指定することですが、私はまだビューに宣言を配置する必要があります。

@{ 
    Layout = ViewBag.Layout; 
} 

それは可能ですか?ソリューション?

答えて

3

参考:http://weblogs.asp.net/scottgu/asp-net-mvc-3-layouts

MVC3ので、あなたは(VBまたは_ViewStart.vbhtml)_ViewStart.cshtmlと呼ばれるファイルを追加することができます...

慣習がある の\Viewsフォルダの下にあなたのプロジェクト:

_ViewStartファイルは、各ビューのレンダリングの開始時に が実行する共通のビューコードを定義するために使用できます。このコードは、各ビューの開始時に実行されるため

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

:たとえば、私たち は、プログラム は、デフォルトでは_ContentLayout.cshtmlファイル する各ビューのレイアウトプロパティを設定するために私たちの_ViewStart.cshtmlファイル内のコードを書くことができ は、個々のビューファイル のいずれかで明示的にレイアウトを設定する必要がなくなりました(上記のデフォルト値を上書きする場合を除く)。

+0

が、これは私の質問に答えると、イエスは、私はすでに、おかげでそのファイルを持っているようです信じて!しかし、これはコントローラベースで適用することができます。各コントローラにデフォルトのテンプレートがありますか? – MikeDub

+0

これは '_ViewStart'でも可能です。簡単に条件文を実行してコントローラをチェックすることができます。コントローラに応じて 'Layout'を設定します。 – Nkosi

3

Nkosiが述べたように、ビューにレイアウトパスを指定せずにコントローラごとにレイアウトを調整する場合は、_ViewStartファイルで条件ブロックを実行できます。

しかし、私もほんの少し簡単に動作していることがわかりました...

  • 場所あなたが別のを持ちたい(制御装置に関する)各ビューフォルダ内のファイル_ViewStart、レイアウト。
  • ビューエリアフォルダ内のより具体的な_ViewStartは、グローバル_ViewStartファイルを上書きします。

Specifying different layouts in each folder

+1

私の条件付き提案よりはるかに簡単です。私はネストされたビューの開始を完全に見逃しました。 – Nkosi

関連する問題