ASP.NET MVC - Установите Master View соответственно с контроллером
-
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
Это возможно?
Заранее спасибо
Решение
Вы можете переопределить OnActionExecuting в этом классе Controller.
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
}