Câu trả lời:
Nếu bạn có chế độ xem _Layout.cshtml như thế này
<html>
<body>
@RenderBody()
@RenderSection("scripts", required: false)
</body>
</html>
sau đó bạn có thể có một chế độ xem nội dung index.cshtml như thế này
@section scripts {
<script type="text/javascript">alert('hello');</script>
}
các yêu cầu chỉ ra hay không xem bằng cách sử dụng trang bố trí phải có một phần kịch bản
Nếu
(1) bạn có chế độ xem _Layout.cshtml như thế này
<html>
<body>
@RenderBody()
</body>
<script type="text/javascript" src="~/lib/layout.js"></script>
@RenderSection("scripts", required: false)
</html>
(2) bạn có Danh bạ.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) bạn có About.cshtml
<div class="row">
<div class="col-md-6 col-md-offset-3">
<h2> Contacts</h2>
</div>
</div>
Trên trang bố cục của bạn, nếu được yêu cầu được đặt thành false "@RenderSection (" tập lệnh ", bắt buộc: false)", Khi trang hiển thị và người dùng ở trên trang, trang contact.js không hiển thị.
<html>
<body><div>About<div>
</body>
<script type="text/javascript" src="~/lib/layout.js"></script>
</html>
nếu được yêu cầu được đặt thành đúng "@RenderSection (" tập lệnh ", bắt buộc: true)", Khi trang hiển thị và người dùng ở trên trang GIỚI THIỆU, thì contact.js VẪN được hiển thị.
<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>
Ở NGẮN, khi được đặt thành đúng , cho dù bạn có cần hay không trên các trang khác, nó sẽ được hiển thị bằng mọi cách. Nếu được đặt thành false , nó sẽ chỉ hiển thị khi trang con được hiển thị.
Đây là định nghĩa của Rendingection từ MSDN
Trong các trang bố trí, hiển thị nội dung của một phần được đặt tên. MSDN
Trong trang _layout.cs đặt
@RenderSection("Bottom",false)
Ở đây kết xuất nội dung của phần bootom và chỉ định thuộc tính false
boolean để chỉ định xem phần đó có bắt buộc hay không.
@section Bottom{
This message form bottom.
}
Điều đó có nghĩa là nếu bạn muốn phần dưới cùng trong tất cả các trang, thì bạn phải sử dụng false làm tham số thứ hai trong phương thức Render.
Giả sử nếu tôi có GetAllEmprocod.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>
}
Và một góc nhìn khác "GetEmployeeDetails.cshtml" không có tập lệnh
<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>
Và trang bố trí của tôi "_layout.cshtml"
@RenderSection("Scripts", required: true)
Vì vậy, khi tôi điều hướng đến GetEmployeeDetails.cshtml. Tôi nhận được lỗi rằng không có tập lệnh phần nào được hiển thị trong GetEmployeeDetails.cshtml. Nếu tôi thay đổi cờ trong @RenderSection()
từ required : true
thành `` required: false`. Nó có nghĩa là kết xuất các tập lệnh được xác định trong tập lệnh @section của các khung nhìn nếu có. Hiện tại, không làm gì cả. Và cách tiếp cận tinh tế sẽ có trong _layout.cshtml
@if (IsSectionDefined("Scripts"))
{
@RenderSection("Scripts", required: true)
}
Section not defined: "scripts".
khi hiển thị trang Giới thiệu của mình khi đặt cờ yêu cầutrue
.