Ви можете помістити _ViewStart.cshtml
файл всередину /Views/Public
папки, який замінить стандартний у /Views
папці та вказати потрібний макет:
@{
Layout = "~/Views/Shared/_PublicLayout.cshtml";
}
За аналогією ви можете помістити ще один _ViewStart.cshtml
файл всередину /Views/Staff
папки за допомогою:
@{
Layout = "~/Views/Shared/_StaffLayout.cshtml";
}
Ви також можете вказати, який макет слід використовувати при поверненні подання всередині дії контролера, але це за дією:
return View("Index", "~/Views/Shared/_StaffLayout.cshtml", someViewModel);
Ще одна можливість - це спеціальний фільтр дій, який би змінив макет. Як ви бачите багато можливостей цього досягти. Ви самі вирішуєте, який з найкращих підходить для вашого сценарію.
ОНОВЛЕННЯ:
Як вимагається в розділі коментарів, ось приклад фільтра дій, який обрав би головну сторінку:
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;
}
}
}
а потім прикрасьте контролер або дію цим спеціальним атрибутом із зазначенням потрібного макета:
[LayoutInjecter("_PublicLayout")]
public ActionResult Index()
{
return View();
}
Razor
виду, просто встановітьLayout = null;