В Razor есть два вида представлений: обычные файлы .cshtml и макеты , которые (не такие, как на страницах ASPX, там главные страницы имеют суффикс .master), также имеют суффикс.cshtml, но обычно они не отображаются непосредственно из контроллера, однако вы должны указать макет страницы:
@{
Layout = "_Layout";
}
Тогда Razor будет искать _Layout.cshtml
в текущем каталоге и каталоге /Views/Shared
, как и любой вид.Если вы установите Layout = null;
, то у страницы не будет макета.
Этот код также может иметь значение /Views/_ViewStart.cshtml
, поскольку по соглашению любой код в этом файле будет запускаться до код в представлении (чтобы вы могли переопределить макет, указанный в этом файле, из представления).
Когда Razor Engine должен отображать представление с макетом, он отображает только макет.Но если вы вызываете метод RenderBody()
, он визуализирует представление и помещает его в место вызова RenderBody()
.
Существует аналогичный метод RenderSection()
, который отображает один разделзрения.Посмотрите на элемент <head>
вашего _Layout.cshtml
:
<html>
<head>
<!-- ... -->
@RenderSection("scripts", required: false)
<!-- ... -->
</head>
<!-- ... -->
</html>
При вызове RenderSection()
отображается раздел scripts
.параметр required: false
указывает, что casn будет представлением без раздела scripts
;Без этого такое представление вызовет ошибку времени выполнения.
Теперь, пожалуйста, посмотрите следующее представление:
<div>Some View</div>
Вызов RenderBody()
будет заменен на <div>Some View</div>
.
Однако, если представление выглядит следующим образом:
<div>Some View</div>
@section scripts {
<script src="jsfile.js"></script>
}
Тогда RenderBody()
будет таким же, но вызов RenderSection("scripts", ...)
будет заменен на <script src="jsfile.js"></script>
.Разделы позволяют вам создавать основной контент, а также вторичный контент - такой как заголовок, специальные сценарии / стили и т. Д.
Некоторые комментарии: макеты также могут иметь макеты - это позволяет вам создавать вложенную страницу,например в компании - основной макет, специальный макет для маркетингового класса, макет для разделов управления ...