Вы можете поместить файл _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();
}
person
Darin Dimitrov
schedule
01.03.2011
Razor
представления, просто установитеLayout = null;
- person Leniel Maccaferri   schedule 19.03.2014