[解決済み】ASP.NET MVC 3 razor ViewStart ファイルで異なるレイアウトを指定するには?
質問
アプリケーションで2つのレイアウトを使い分けたいのですが、どうすればいいですか?例えば、1つはウェブサイトのパブリックセクション用、もう1つはメンバーサイド用とします。
簡単のために、これらのサイトのすべてのロジックは、2つの異なるコントローラにきちんとラップされているとしましょう。
- PublicController
- StaffController
そして、それぞれの下にあるすべてのViewに対応するLayoutをそれぞれ持っていること。
- _PublicLayout.cshtml
- _StaffLayout.cshtml
_ViewStart.cshtml ファイルを使用して、"Public" 以下のすべてのView / ActionがPublicLayoutを使用し、"Staff" 以下のすべてがStaffLayoutを使用すると指定するには、どのようにしたらよいでしょうか。
解決方法は?
を配置することができます。
_ViewStart.cshtml
ファイルの中に
/Views/Public
フォルダーにあるデフォルトのものを上書きします。
/Views
フォルダを作成し、希望のレイアウトを指定します。
@{
Layout = "~/Views/Shared/_PublicLayout.cshtml";
}
類似の方法として、別の
_ViewStart.cshtml
ファイルの中に
/Views/Staff
というフォルダを作成します。
@{
Layout = "~/Views/Shared/_StaffLayout.cshtml";
}
また、コントローラアクションの中でビューを返すときにどのレイアウトを使用するかを指定することもできますが、これはアクションごとに行います。
return View("Index", "~/Views/Shared/_StaffLayout.cshtml", someViewModel);
さらに別の可能性としては、レイアウトを上書きするカスタムアクションフィルタがあります。このように、多くの可能性があることがお分かりいただけると思います。あなたのシナリオに最も適したものを選択するのはあなた次第です。
UPDATE
コメント欄でリクエストのあった、マスターページを選択するアクションフィルターの例です。
public class LayoutInjecterAttribute : ActionFilterAttribute
{
private readonly string _masterName;
public LayoutInjecterAttribute(string masterName)
{
_masterName = masterName;
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
var result = filterContext.Result as ViewResult;
if (result != null)
{
result.MasterName = _masterName;
}
}
}
を作成し、コントローラやアクションをこのカスタム属性で装飾し、必要なレイアウトを指定します。
[LayoutInjecter("_PublicLayout")]
public ActionResult Index()
{
return View();
}
関連
-
[解決済み] ファイルアップロード ASP.NET MVC 3.0
-
[解決済み] ASP.NET MVC Frameworkで複数のサブミットボタンを処理する方法は?
-
[解決済み] ASP.NET MVCでenumからドロップダウンリストを作成するにはどうすればよいですか?
-
[解決済み] razor で三項演算子を使用するには (特に HTML 属性について)?
-
[解決済み】部分ビューから特定のセクションにコンテンツを注入する ASP.NET MVC 3 with Razor View Engine
-
[解決済み】ASP.NET RazorのHTML.ActionLinkとUrl.Actionの比較
-
[解決済み] [Solved] Replace line break characters with <br /> in ASP.NET MVC Razor view
-
[解決済み】ASP.NET MVC 3 RazorでAjax.BeginFormを使用する。
-
[解決済み】ASP.NET MVC 3 Razor: JavaScriptファイルをheadタグにインクルードする。
-
[解決済み】ASP.NET MVC 3 Razor - EditorForにクラスを追加する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 既存のデータベースの選択されたテーブルからDbContextをScaffoldすることができますか[重複]。
-
[解決済み] ELMAHをASP.NET MVCの[HandleError]属性で動作させる方法は?
-
[解決済み] ASP.NET MVCでHTML-5のdata-*属性でダッシュを使用する方法
-
[解決済み】認証や認可に失敗した場合、AuthorizeAttributeがログインページにリダイレクトされるのはなぜですか?
-
[解決済み】"JSONリクエストが大きすぎてデシリアライズできませんでした "の表示について
-
[解決済み] ASP.Net MVCでRequest on Controllerをモック化する方法とは?
-
[解決済み] ASP.NET MVCのモデルでUrlHelperを呼び出す
-
[解決済み] エリア間のRedirectToAction?
-
[解決済み] Visual Studio 2012 または Visual Studio 2013 で古い MVC プロジェクトを開くにはどうすればよいですか?
-
[解決済み] ASP.NET MVC: @sectionの目的は何ですか?[クローズド]