Sie könnten eine _ViewStart.cshtml
Datei innerhalb der /Views/Public
der den Standardordner in der Datei /Views
und geben Sie das gewünschte Layout an:
@{
Layout = "~/Views/Shared/_PublicLayout.cshtml";
}
In Analogie dazu könnte man eine andere _ViewStart.cshtml
Datei innerhalb der /Views/Staff
Ordner mit:
@{
Layout = "~/Views/Shared/_StaffLayout.cshtml";
}
Sie könnten auch angeben, welches Layout verwendet werden soll, wenn ein View innerhalb einer Controller-Aktion zurückgegeben wird, aber das ist pro Aktion:
return View("Index", "~/Views/Shared/_StaffLayout.cshtml", someViewModel);
Eine weitere Möglichkeit ist ein benutzerdefinierter Aktionsfilter, der das Layout außer Kraft setzt. Wie Sie sehen können, gibt es viele Möglichkeiten, dies zu erreichen. Es liegt an Ihnen zu entscheiden, welche für Ihr Szenario am besten geeignet ist.
UPDATE:
Wie in den Kommentaren gewünscht, hier ein Beispiel für einen Aktionsfilter, der eine Musterseite auswählen würde:
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;
}
}
}
und dekorieren Sie dann einen Controller oder eine Aktion mit diesem benutzerdefinierten Attribut, das das gewünschte Layout angibt:
[LayoutInjecter("_PublicLayout")]
public ActionResult Index()
{
return View();
}