MVC 3レイアウトとコントローラー
-
27-10-2019 - |
質問
MVC 3アプリケーションを構築しています。アプリケーションは、サブドメイン(例:customer1.mysite.com-> layout1; customer2.mysite.com-> layout2;など)に従って異なるレイアウトを表示できる必要があります。 IE 6。
レイアウトを設定するためにロジックを行うために活用できる_viewstart.cshtmlであることがわかりました。しかし、私が得ていないのは、そのためのコントロールはどこにあるのでしょうか?ビューにすべてのコードを書く必要がありますか?
レイアウトの他の質問は、一般的な動作のコードをどのように考慮しますか?そのためのコントローナーはいますか?
そして、最後の1つは、ASP.NET MVC2の領域の概念を見ました。
ご協力ありがとうございました
フレッド
解決
_viewstartでこれを行うことができますが、より良い方法は カスタムビューエンジン ユーザーエージェントまたはドメインに基づいて、異なるレイアウトが含まれています。その後、共通のコントローラーとビューがあり、レイアウトのみが異なります。
他のヒント
これは使用するのに良い時期のように聞こえます ViewBag.
アイデアはその中にです OnactionExecuting, 、サブドメインを調べて、それをビューバッグに押し込みます。これは、他のコントローラーが継承するカスタムベースコントローラーで、または ActionFilter.
次に、_ViewStartで、ビューバグにスイッチステートメントを記述してレイアウトを制御できます。
たとえば、ここには存在するアクションフィルターがあります @ViewBag.Subdomain
_viewstart.cshtmlを含むカミソリのビューのいずれかで。
public class AddSubdomainToViewDataAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var subdomain = filterContext.HttpContext.Request.Url.Authority.Split('.').First();
var controller = filterContext.Controller as Controller;
controller.ViewData.Add("Subdomain", subdomain);
}
}
次に、この新しいものでコントローラーを飾ります [AddSubdomainToViewData]
属性。
最後に、_viewstart.cshtmlで、次のようなことをします。
@{
Layout = "~/Views/Shared/" + ((@ViewContext.ViewData["Subdomain"] as String) ?? String.Empty) + "_layout.cshtml";
}
これにより、各サブドメインに対して異なるカミソリレイアウトが使用されます。