92

次のプロジェクト構造があります。

  • /Views/Shared/_Layout;

  • /エリア/エリア1/ビュー/コントローラー名/インデックス;

...

  • /エリア/エリアN/ビュー/コントローラー名/インデックス.

すべての領域で_Layoutベース レイアウトとして使用するように強制する方法はありますか?

_ViewStartファイルを追加せずに(たとえば、ルーティング構成を介して) それを行う方法はありますか?

関連項目:

ASP.NET MVC 3 razor ViewStart ファイルで異なるレイアウトを指定するにはどうすればよいですか?

4

3 に答える 3

161

次の名前のファイルを追加するだけです。

_ViewStart.cshtml

各エリア ビュー フォルダの下:

/Areas/Area1/Views/_ViewStart.cshtml

そして、次のようにルート レイアウトを指すようにファイルを編集します。

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

これが機能するために、ビューのレイアウト プロパティで値を指定する必要はありません。指定すると、グローバル レイアウトがオーバーライドされます。

注: Tony が述べたように、各ビューのレイアウト プロパティを編集してルート レイアウトを指すようにすることもできますが、これは推奨される方法ではありません。

編集 1

コードを使用してデフォルト ビューのレイアウトを設定する場合は、カスタム ビュー エンジンの作成を検討する必要があります。

カスタムについてグーグルで検索してみてRazorViewEngineくださいRazorView

この記事は良い出発点になるかもしれません

http://weblogs.asp.net/imranbaloch/archive/2011/06/27/view-engine-with-dynamic-view-location.aspx

私はこのようなことはしていませんが、正しい方向に向けていることを願っています

于 2012-11-07T20:03:07.217 に答える
3

以下を使用してレイアウトを指定します。

@ {Layout = "_Layout"; }

これを一度に簡単に変更したい場合。おそらく、それをビューバッグ変数として設定し、コントローラーに渡すことができます。さらに簡単にするために、他のコントローラーが継承するベースコントローラーを作成し、そこにあるビューバッグにレイアウトを割り当てることができます。

ルーティングを変更する必要がある理由がわからないか、おそらく私は理解していません。お役に立てれば :)

于 2012-11-07T20:00:37.853 に答える