Яка мета @RenderSection та як вона функціонує? Я розумію, що роблять пакети, але мені ще належить з'ясувати, що це робить, і це, мабуть, важливо.
@RenderSection("scripts", required: false)
Можливо, невеликий приклад того, як ним користуватися?
Яка мета @RenderSection та як вона функціонує? Я розумію, що роблять пакети, але мені ще належить з'ясувати, що це робить, і це, мабуть, важливо.
@RenderSection("scripts", required: false)
Можливо, невеликий приклад того, як ним користуватися?
Відповіді:
Якщо у вас такий вид _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>
На вашій сторінці макета, якщо потрібно, встановлено значення "@RenderSection (" сценарії ", обов'язкові: false)", Коли сторінка відображається і користувач знаходиться на сторінці, контакти.js не відображаються.
<html>
<body><div>About<div>
</body>
<script type="text/javascript" src="~/lib/layout.js"></script>
</html>
якщо для цього потрібно встановити значення "@RenderSection (" скрипти ", обов'язкові: істинно)", Коли сторінка відображається і користувач знаходиться на сторінці ПРО ПРОГРАМУ, контакти.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 , воно відображатиметься лише тоді, коли буде надана дочірня сторінка.
Тут визначення рендесекції від MSDN
На сторінках макета відображає вміст названого розділу. MSDN
На сторінку _layout.cs помістити
@RenderSection("Bottom",false)
Тут візуалізується вміст завантажувального розділу та вказується false
булева властивість, щоб вказати, потрібен чи ні розділ.
@section Bottom{
This message form bottom.
}
Це означає, що якщо ви хочете отримати нижній розділ на всіх сторінках, тоді ви повинні використовувати false як другий параметр методу рендесекції.
Припустимо, чи є у мене GetAllEслуees.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>
}
І ще один перегляд "GetEposleeeDetails.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)
Отже, коли я переходжу до GetEposleeeDetails.cshtml. Я отримую помилку в тому, що в GetE zaposeeDetails.cshtml немає сценаріїв розділів, які потрібно візуалізувати. Якщо я поміняю прапор @RenderSection()
з required : true
"на обов'язково: помилково". Це означає візуалізацію сценаріїв, визначених у сценаріях @section для представлень, якщо вони є. Також нічого не робити. І вдосконалений підхід був би в _layout.cshtml
@if (IsSectionDefined("Scripts"))
{
@RenderSection("Scripts", required: true)
}
Section not defined: "scripts".
під час встановлення потрібного прапорця ви отримаєте під час надання своєї сторінки Abouttrue
.