Odpowiedzi:
Jeśli masz taki widok _Layout.cshtml
<html>
<body>
@RenderBody()
@RenderSection("scripts", required: false)
</body>
</html>
wtedy możesz mieć widok zawartości index.cshtml w ten sposób
@section scripts {
<script type="text/javascript">alert('hello');</script>
}
wymagane wskazuje, czy widok za pomocą strony układu musi mieć przekrój scripts
Jeśli
(1) masz widok _Layout.cshtml taki jak ten
<html>
<body>
@RenderBody()
</body>
<script type="text/javascript" src="~/lib/layout.js"></script>
@RenderSection("scripts", required: false)
</html>
(2) masz 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) masz About.cshtml
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h2> Contacts</h2>
</div>
</div>
Na twojej stronie układu, jeśli wymagane jest ustawione na false "@RenderSection (" scripts ", required: false)", Kiedy strona jest renderowana, a użytkownik jest na stronie, plik contacts.js nie jest renderowany.
<html>
<body><div>About<div>
</body>
<script type="text/javascript" src="~/lib/layout.js"></script>
</html>
jeśli wymagane jest ustawione na true "@RenderSection (" scripts ", required: true)", Kiedy strona jest renderowana, a użytkownik znajduje się na stronie ABOUT, plik contacts.js STILL jest renderowany.
<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>
W SKRÓCIE, jeśli ustawione na true , czy tego potrzebujesz, czy nie na innych stronach, i tak zostanie wyrenderowane. Jeśli ustawiona na false , będzie renderowana tylko wtedy, gdy strona podrzędna jest renderowana.
Tutaj definicja Rendersection from MSDN
Na stronach układu renderuje zawartość nazwanej sekcji. MSDN
Na stronie _layout.cs umieść
@RenderSection("Bottom",false)
Tutaj renderuj zawartość sekcji bootom i false
określ właściwość logiczną, aby określić, czy sekcja jest wymagana, czy nie.
@section Bottom{
This message form bottom.
}
Oznacza to, że jeśli chcesz mieć dolną sekcję na wszystkich stronach, musisz użyć false jako drugiego parametru w metodzie Rendersection.
Załóżmy, że mam 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>
}
I kolejny widok „GetEmployeeDetails.cshtml” bez skryptów
<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>
A moja strona układu „_layout.cshtml”
@RenderSection("Scripts", required: true)
Tak więc, kiedy przechodzę do GetEmployeeDetails.cshtml. Otrzymuję błąd, że w GetEmployeeDetails.cshtml nie ma skryptów sekcji do renderowania. Jeśli zmienię flagę @RenderSection()
z required : true
na „wymagane: fałsz”. Oznacza to renderowanie skryptów zdefiniowanych w skryptach @section widoków, jeśli są obecne. A dopracowane podejście byłoby w _layout.cshtml
@if (IsSectionDefined("Scripts"))
{
@RenderSection("Scripts", required: true)
}
Section not defined: "scripts".
podczas renderowania strony Informacje podczas ustawiania wymaganej flagi zostanie wyświetlony symboltrue
.