Vous pourriez mettre un _ViewStart.cshtml
le fichier à l'intérieur de l' /Views/Public
le dossier qui l'emporterait sur celui par défaut dans l' /Views
le dossier et de spécifier la mise en page souhaitée:
@{
Layout = "~/Views/Shared/_PublicLayout.cshtml";
}
Par analogie, vous pouvez placer un autre _ViewStart.cshtml
le fichier à l'intérieur de l' /Views/Staff
le dossier:
@{
Layout = "~/Views/Shared/_StaffLayout.cshtml";
}
Vous pouvez également spécifier la mise en page doit être utilisé lors du retour d'une vue à l'intérieur d'un contrôleur de l'action, mais c'est par l'action:
return View("Index", "~/Views/Shared/_StaffLayout.cshtml", someViewModel);
Encore une autre possibilité est une action personnalisée filtre qui l'emporterait sur la mise en page. Comme vous pouvez le voir beaucoup de possibilités pour atteindre cet objectif. À vous de choisir celui qui correspond le mieux à votre scénario.
Mise à JOUR:
Comme demandé dans la section des commentaires, voici un exemple d'une action de filtre qui permettrait de choisir une page maître:
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;
}
}
}
et puis décorer d'un contrôleur ou d'une action avec cet attribut personnalisé précisant la mise en page que vous voulez:
[LayoutInjecter("_PublicLayout")]
public ActionResult Index()
{
return View();
}