ASP.NET MVC: establezca la vista maestra en consecuencia con el controlador
-
07-07-2019 - |
Pregunta
Por casualidad, ¿hay alguna manera fácil de configurar un MasterView predeterminado para todas las acciones dentro de un controlador específico?
Por ejemplo, si tengo el HomeController quiero que todas las acciones dentro de él hereden el Site.Master por defecto, pero si estoy dentro del AccountsController Quiero que toda la acción herede el Admin.Master y así sucesivamente ..
Logré hacerlo con:
return View("viewName", "masterName", objectModel);
Pero al hacer esto, tengo que aplicarlo cada vez que llamo al método View.
Estaba buscando algo más simple como en los rieles donde podemos declarar:
class HomeController < ApplicationController
layout 'site'
def index
end
def create
...
end
class AccountsController < ApplicationController
layout 'admin'
def index
end
def create
...
end
¿Es eso posible?
Gracias de antemano
Solución
Puede anular OnActionExecuting en esa clase de Controlador.
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
ViewData["MasterfileToUser"] = "site";
}
O si lo desea, puede convertir esto en un ActionFilterAttribute que puede aplicar en el controlador o en el nivel de acción
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;
}
}
que luego a su vez usa así:
[MasterFileFilterAttribute(Master = "site")]
public class HomeController : Controller
{
// Action methods
}