Podría poner un _ViewStart.cshtml
archivo dentro de la /Views/Public
carpeta que anularía el predeterminado en la /Views
carpeta y especificar el diseño deseado:
@{
Layout = "~/Views/Shared/_PublicLayout.cshtml";
}
Por analogía, podría poner otro _ViewStart.cshtml
archivo dentro de la /Views/Staff
carpeta con:
@{
Layout = "~/Views/Shared/_StaffLayout.cshtml";
}
También puede especificar qué diseño se debe usar al devolver una vista dentro de una acción del controlador, pero eso es por acción:
return View("Index", "~/Views/Shared/_StaffLayout.cshtml", someViewModel);
Otra posibilidad es un filtro de acción personalizado que anularía el diseño. Como puede ver muchas posibilidades para lograr esto. Depende de usted elegir cuál se adapta mejor a su situación.
ACTUALIZAR:
Como se solicitó en la sección de comentarios, aquí hay un ejemplo de un filtro de acción que elegiría una página maestra:
public class LayoutInjecterAttribute : ActionFilterAttribute
{
private readonly string _masterName;
public LayoutInjecterAttribute(string masterName)
{
_masterName = masterName;
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
var result = filterContext.Result as ViewResult;
if (result != null)
{
result.MasterName = _masterName;
}
}
}
y luego decorar un controlador o una acción con este atributo personalizado que especifica el diseño que desea:
[LayoutInjecter("_PublicLayout")]
public ActionResult Index()
{
return View();
}
Razor
vista determinada , simplemente configureLayout = null;