Antworten:
Wenn Sie eine _Layout.cshtml-Ansicht wie diese haben
<html>
<body>
@RenderBody()
@RenderSection("scripts", required: false)
</body>
</html>
Dann können Sie eine Inhaltsansicht von index.cshtml wie diese haben
@section scripts {
<script type="text/javascript">alert('hello');</script>
}
Das Erforderliche gibt an, ob die Ansicht auf der Layoutseite einen Skriptabschnitt enthalten muss
Wenn
(1) Sie haben eine _Layout.cshtml-Ansicht wie diese
<html>
<body>
@RenderBody()
</body>
<script type="text/javascript" src="~/lib/layout.js"></script>
@RenderSection("scripts", required: false)
</html>
(2) Sie haben 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) Sie haben About.cshtml
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h2> Contacts</h2>
</div>
</div>
Wenn auf Ihrer Layoutseite bei Bedarf "false" @RenderSection ("scripts", erforderlich: false) "festgelegt ist, wird die Datei" contacts.js "nicht gerendert, wenn die Seite gerendert wird und sich der Benutzer auf einer Seite befindet.
<html>
<body><div>About<div>
</body>
<script type="text/javascript" src="~/lib/layout.js"></script>
</html>
Wenn erforderlich, wird "@RenderSection (" scripts ", erforderlich: true)" auf "true" gesetzt. Wenn die Seite gerendert wird und sich der Benutzer auf der Seite "ÜBER" befindet, wird "contacts.js STILL" gerendert.
<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>
KURZ, wenn auf true gesetzt , ob Sie es auf anderen Seiten benötigen oder nicht, wird es trotzdem gerendert. Wenn false festgelegt ist , wird nur gerendert, wenn die untergeordnete Seite gerendert wird.
Hier die Definition von Rendersection aus MSDN
Rendert auf Layoutseiten den Inhalt eines benannten Abschnitts. MSDN
In _layout.cs Seite setzen
@RenderSection("Bottom",false)
Hier wird der Inhalt des Bootom-Abschnitts gerendert und die falseboolesche Eigenschaft angegeben, um anzugeben, ob der Abschnitt erforderlich ist oder nicht.
@section Bottom{
This message form bottom.
}
Das heißt, wenn Sie den unteren Abschnitt auf allen Seiten schließen möchten, müssen Sie false als zweiten Parameter bei der Rendersection-Methode verwenden.
Angenommen, ich habe 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>
}
Und eine andere Ansicht "GetEmployeeDetails.cshtml" ohne Skripte
<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>
Und meine Layoutseite "_layout.cshtml"
@RenderSection("Scripts", required: true)
Wenn ich also zu GetEmployeeDetails.cshtml navigiere. Ich erhalte die Fehlermeldung, dass in GetEmployeeDetails.cshtml keine Abschnittsskripte gerendert werden müssen. Wenn ich das Flag @RenderSection()von required : true"Erforderlich: Falsch" ändere. Dies bedeutet, dass die in den @ section-Skripten der Ansichten definierten Skripte gerendert werden, falls vorhanden. Andernfalls nichts tun. Und der verfeinerte Ansatz wäre in _layout.cshtml
@if (IsSectionDefined("Scripts"))
{
@RenderSection("Scripts", required: true)
}
Section not defined: "scripts".beim Rendern Ihrer Info-Seite eine erhalten, wenn Sie das erforderliche Flag setzentrue.