Respuestas:
Si tiene una vista _Layout.cshtml como esta
<html>
<body>
@RenderBody()
@RenderSection("scripts", required: false)
</body>
</html>
entonces puede tener una vista de contenido index.cshtml como esta
@section scripts {
<script type="text/javascript">alert('hello');</script>
}
lo requerido indica si la vista que usa la página de diseño debe tener una sección de secuencias de comandos
Si
(1) tiene una vista _Layout.cshtml como esta
<html>
<body>
@RenderBody()
</body>
<script type="text/javascript" src="~/lib/layout.js"></script>
@RenderSection("scripts", required: false)
</html>
(2) tienes Contactos.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) tienes About.cshtml
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h2> Contacts</h2>
</div>
</div>
En su página de diseño, si es necesario, se establece en falso "@RenderSection (" scripts ", requerido: falso)", cuando la página se representa y el usuario está en la página, los contactos.js no se procesan.
<html>
<body><div>About<div>
</body>
<script type="text/javascript" src="~/lib/layout.js"></script>
</html>
si se requiere se establece en verdadero "@RenderSection (" scripts ", requerido: verdadero)", Cuando la página se representa y el usuario está en la página ACERCA DE, se contacta TODOS los contactos .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>
EN CORTO, cuando se establece en verdadero , ya sea que lo necesite o no en otras páginas, se representará de todos modos. Si se establece en falso , solo se representará cuando se represente la página secundaria.
Aquí la definición de Rendersection de MSDN
En las páginas de diseño, representa el contenido de una sección con nombre. MSDN
En la página _layout.cs poner
@RenderSection("Bottom",false)
Aquí representa el contenido de la sección bootom y especifica la falsepropiedad booleana para especificar si la sección es obligatoria o no.
@section Bottom{
This message form bottom.
}
Eso significa que si desea ir a la sección inferior en todas las páginas, debe usar falso como el segundo parámetro en el método Rendersection.
Supongamos que tengo 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>
}
Y otra vista "GetEmployeeDetails.cshtml" sin scripts
<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>
Y mi página de diseño "_layout.cshtml"
@RenderSection("Scripts", required: true)
Entonces, cuando navego a GetEmployeeDetails.cshtml. Me sale el error de que no hay secuencias de comandos de sección para ser representados en GetEmployeeDetails.cshtml. Si cambio la bandera @RenderSection()de required : truea `` requerido: falso`. Significa renderizar los scripts definidos en los scripts @section de las vistas si están presentes. De lo contrario, no haga nada. Y el enfoque refinado estaría en _layout.cshtml
@if (IsSectionDefined("Scripts"))
{
@RenderSection("Scripts", required: true)
}
Section not defined: "scripts".al representar tu página Acerca de cuando configures el marcador requeridotrue.