コントローラーで OnActionExecuting をオーバーライドします。
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.RequestContext.HttpContext.Request.QueryString["MenuLayoutName"] != null && IsValidMenuLayoutName(filterContext.RequestContext.HttpContext.Request.QueryString["MenuLayoutName"] != null))
ViewBag.MenuLayoutName = filterContext.RequestContext.HttpContext.Request.QueryString["MenuLayoutName"];
}
メニューをレンダリングするときに _Layout.cshtml で、ViewBag.MenuLayoutName を見て、使用するメニューを決定します。最も効率的な方法は、単純に部分ビューを作成して、次のようにメニューをレンダリングできるようにすることです。
@{ Html.RenderPartial(ViewBag.MenuLayoutName); }
ただし、IsValidMenuLayoutName の呼び出しに注意してください。そうしないと、有効な部分ビューの名前をそこに入力して、メニューが表示されると予想される場所にレンダリングされる可能性があります。
ユーザーがさまざまなメニュー レイアウトを選択できるようにするリンクで、ページへのリンクを変更して、使用するレイアウトの名前を指定します。
<a href="/Index?MenuLayoutName=RedLayout">Use Red Menu</a>