Ответы:
Если у вас есть представление _Layout.cshtml, как это
<html>
<body>
@RenderBody()
@RenderSection("scripts", required: false)
</body>
</html>
тогда вы можете иметь представление содержимого index.cshtml, как это
@section scripts {
<script type="text/javascript">alert('hello');</script>
}
требуется указывает , является ли вид с помощью страницы макета должны иметь раздел скриптов
Если
(1) у вас есть представление _Layout.cshtml, как это
<html>
<body>
@RenderBody()
</body>
<script type="text/javascript" src="~/lib/layout.js"></script>
@RenderSection("scripts", required: false)
</html>
(2) у вас есть Contacts.cshtml
@section Scripts{
<script type="text/javascript" src="~/lib/contacts.js"></script>
}
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h2> Contacts</h2>
</div>
</div>
(3) у вас есть About.cshtml
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h2> Contacts</h2>
</div>
</div>
На странице макета, если требуется, установлено значение false "@RenderSection (" scripts ", required: false)", когда страница отображается и пользователь находится около страницы, contacts.js не отображает.
<html>
<body><div>About<div>
</body>
<script type="text/javascript" src="~/lib/layout.js"></script>
</html>
если обязательный параметр установлен в значение «@RenderSection (« scripts », required: true)», когда страница отображается и пользователь находится на странице «О», то contact.js ОСТАЕТСЯ визуализированным.
<html>
<body><div>About<div>
</body>
<script type="text/javascript" src="~/lib/layout.js"></script>
<script type="text/javascript" src="~/lib/contacts.js"></script>
</html>
КОРОТКО, если задано значение true , нужно ли вам это или нет на других страницах, оно все равно будет отображаться. Если задано значение false , оно будет отображаться только при отображении дочерней страницы.
Здесь определение Rendersection от MSDN
На страницах макета отображает содержимое именованного раздела. MSDN
На странице _layout.cs положить
@RenderSection("Bottom",false)
Здесь визуализируется содержимое раздела bootom и указывается false
логическое свойство, чтобы указать, является ли раздел обязательным или нет.
@section Bottom{
This message form bottom.
}
Это означает, что если вы хотите использовать нижний раздел на всех страницах, то вы должны использовать false в качестве второго параметра в методе Rendersection.
Предположим, если у меня есть GetAllEmployees.cshtml
<h2>GetAllEmployees</h2>
<p>
<a asp-action="Create">Create New</a>
</p>
<table class="table">
<thead>
// do something ...
</thead>
<tbody>
// do something ...
</tbody>
</table>
//Added my custom scripts in the scripts sections
@section Scripts
{
<script src="~/js/customScripts.js"></script>
}
И еще одно представление «GetEmployeeDetails.cshtml» без сценариев
<h2>GetEmployeeByDetails</h2>
@Model.PageTitle
<p>
<a asp-action="Create">Create New</a>
</p>
<table class="table">
<thead>
// do something ...
</thead>
<tbody>
// do something ...
</tbody>
</table>
И мой макет страницы "_layout.cshtml"
@RenderSection("Scripts", required: true)
Итак, когда я перехожу к GetEmployeeDetails.cshtml. Я получаю сообщение об ошибке, что в GetEmployeeDetails.cshtml нет скриптов раздела. Если я поменяю флаг @RenderSection()
с required : true
на `` required: false`. Это означает визуализацию сценариев, определенных в сценариях @section представлений, если они есть. Иначе ничего не делать. И изысканный подход был бы в _layout.cshtml
@if (IsSectionDefined("Scripts"))
{
@RenderSection("Scripts", required: true)
}
Section not defined: "scripts".
когда будете отображать страницу «О нас» при установке необходимого флагаtrue
.