Możesz umieścić _ViewStart.cshtml
plik w /Views/Public
folderze, który zastąpi domyślny w /Views
folderze i określi pożądany układ:
@{
Layout = "~/Views/Shared/_PublicLayout.cshtml";
}
Analogicznie możesz umieścić _ViewStart.cshtml
w /Views/Staff
folderze inny plik z:
@{
Layout = "~/Views/Shared/_StaffLayout.cshtml";
}
Możesz również określić, który układ powinien zostać użyty podczas zwracania widoku wewnątrz akcji kontrolera, ale to na akcję:
return View("Index", "~/Views/Shared/_StaffLayout.cshtml", someViewModel);
Jeszcze inną możliwością jest niestandardowy filtr akcji, który zastąpiłby układ. Jak widać wiele możliwości osiągnięcia tego celu. Od Ciebie zależy, który z nich najlepiej pasuje do Twojego scenariusza.
AKTUALIZACJA:
Zgodnie z żądaniem w sekcji komentarzy, oto przykład filtru akcji, który wybrałby stronę wzorcową:
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;
}
}
}
a następnie udekoruj kontroler lub akcję za pomocą tego niestandardowego atrybutu określającego pożądany układ:
[LayoutInjecter("_PublicLayout")]
public ActionResult Index()
{
return View();
}
Razor
widoku, po prostu ustawLayout = null;