Você pode colocar um _ViewStart.cshtml
arquivo dentro da /Views/Public
pasta que substituirá o padrão na /Views
pasta e especificar o layout desejado:
@{
Layout = "~/Views/Shared/_PublicLayout.cshtml";
}
Por analogia, você pode colocar outro _ViewStart.cshtml
arquivo dentro da /Views/Staff
pasta com:
@{
Layout = "~/Views/Shared/_StaffLayout.cshtml";
}
Você também pode especificar qual layout deve ser usado ao retornar uma visualização dentro de uma ação do controlador, mas é por ação:
return View("Index", "~/Views/Shared/_StaffLayout.cshtml", someViewModel);
Outra possibilidade é um filtro de ação personalizado que substituiria o layout. Como você pode ver muitas possibilidades para conseguir isso. Você decide qual deles se encaixa melhor no seu cenário.
ATUALIZAR:
Conforme solicitado na seção de comentários, veja um exemplo de filtro de ação que escolheria uma página mestre:
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;
}
}
}
e decore um controlador ou uma ação com este atributo personalizado, especificando o layout que você deseja:
[LayoutInjecter("_PublicLayout")]
public ActionResult Index()
{
return View();
}
Razor
exibição, basta definirLayout = null;