Существует несколько способов указать другой макет для представления в зависимости от ваших потребностей:
В представлении
Как упоминалось в других ответах, просто измените свойство представления Layout
:
@{
Layout = "~/Views/Shared/_CustomLayout.cshtml";
}
В _ViewStart.cshtml
MVC 3 добавлено значение по умолчанию Views/_ViewStart.cshtml
, в которое можно поместить логику, которая является общей для всех представлений.Вы также можете создать дополнительные файлы _ViewStart.cshtml
в любом подкаталоге Views для дополнительной пользовательской логики (она будет искать иерархию и в папках Shared
, как при поиске любого другого представления или части).
Установкамного бизнес-логики в этом ощущается как нарушение принципа «разделения интересов», но в то же время это может быть очень удобно.
Обратите внимание, что _ViewStart.cshtml
наследуется от StartPage , а не WebPage , поэтому его свойства могут немного отличаться от того, к чему вы привыкли (например, вам нужно пройти через ViewContext
, чтобы получить ViewBag
).
@{
if (ViewContext.ViewBag.IsAdmin) // or other custom logic
{
Layout = "~/Views/Shared/_AdminLayout.cshtml";
}
else
{
Layout = "~/Views/Shared/_Layout.cshtml";
}
}
В действии Controller
Метод View()
имеет перегрузку, которая принимает явную страницу макета (Intellisense именует ее «главной страницей»):
public ActionResult FooAction()
{
var model = new MyModel();
return View("Index", "_CustomLayout", model);
}