@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)", เมื่อหน้าแสดงผลและผู้ใช้อยู่บนหน้าเพจ contacts.js จะไม่แสดงผล
<html>
<body><div>About<div>
</body>
<script type="text/javascript" src="~/lib/layout.js"></script>
</html>
หากจำเป็นต้องตั้งค่าเป็น "@RenderSection (" สคริปต์ "ที่จำเป็น: จริง)", เมื่อหน้าแสดงผลและผู้ใช้อยู่ในหน้าเกี่ยวกับหน้า contacts.js STILL จะแสดงผล
<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>
ในระยะสั้นเมื่อตั้งค่าเป็นจริงไม่ว่าคุณต้องการหรือไม่ในหน้าอื่น ๆ มันจะแสดงผลอย่างใด หากตั้งค่าเป็นเท็จมันจะแสดงผลเฉพาะเมื่อมีการแสดงหน้าเพจย่อย
ที่นี่การกำหนดของการแสดงผลจาก MSDN
ในหน้าเลย์เอาต์แสดงเนื้อหาของส่วนที่มีชื่อ MSDN
ในหน้า _layout.cs
@RenderSection("Bottom",false)
ที่นี่แสดงเนื้อหาของส่วน bootom และระบุfalse
คุณสมบัติบูลีนเพื่อระบุว่าจำเป็นต้องใช้ส่วนหรือไม่
@section Bottom{
This message form bottom.
}
ความหมายนั้นถ้าคุณต้องการที่จะส่วนล่างในทุกหน้าแล้วคุณต้องใช้เท็จเป็นพารามิเตอร์ที่สองที่วิธีการแสดงผล
สมมติว่าฉันมี 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>
}
และอีกมุมมอง "GetEmployeeDetails.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)
ดังนั้นเมื่อฉันไปที่ GetEmployeeDetails.cshtml ฉันพบข้อผิดพลาดว่าไม่มีสคริปต์ส่วนที่จะแสดงผลใน GetEmployeeDetails.cshtml ถ้าฉันเปลี่ยนธง@RenderSection()
จากจากrequired : true
เป็น `` ต้องมี: false` มันหมายถึงการแสดงผลสคริปต์ที่กำหนดไว้ในสคริปต์ @section ของมุมมองถ้ามีอยู่อย่าทำอะไรเลย และวิธีการกลั่นจะเป็น _layout.cshtml
@if (IsSectionDefined("Scripts"))
{
@RenderSection("Scripts", required: true)
}
Section not defined: "scripts".
true