ASP.NET MVC-コントローラーに応じてマスタービューを設定する
-
07-07-2019 - |
質問
万が一、特定のコントローラー内のすべてのアクションにデフォルトのMasterViewを設定する簡単な方法はありますか?
たとえば、 HomeController がある場合、その中のすべてのアクションにデフォルトとして Site.Master を継承させますが、 AccountsController すべてのアクションに Admin.Master などを継承させます。
どうにかして:
return View("viewName", "masterName", objectModel);
ただし、これを行うには、Viewメソッドを呼び出すたびに適用する必要があります。
私たちが宣言できるレールのようなもっと簡単なものを探していました:
class HomeController < ApplicationController
layout 'site'
def index
end
def create
...
end
class AccountsController < ApplicationController
layout 'admin'
def index
end
def create
...
end
それは可能ですか?
事前に感謝
解決
そのControllerクラスでOnActionExecutingをオーバーライドできます。
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
ViewData["MasterfileToUser"] = "site";
}
または、必要に応じてこれをActionFilterAttributeに変換して、コントローラーまたはアクションレベルで適用できます
using System;
using System.Web.Mvc;
public class MasterFileFilterAttribute : ActionFilterAttribute
{
public string Master { get; set; }
public override void OnActionExecuted( ActionExecutedContext filterContext)
{
if (filterContext.Result is ViewResult)
((ViewResult)filterContext.Result).MasterName = Master;
}
}
次のように順番に使用します:
[MasterFileFilterAttribute(Master = "site")]
public class HomeController : Controller
{
// Action methods
}
所属していません StackOverflow