@RenderSection trong asp.net MVC là gì


170

Mục đích của @RenderSection là gì và nó hoạt động như thế nào? Tôi hiểu những gì bó làm, nhưng tôi vẫn chưa tìm ra những gì nó làm và nó có thể quan trọng.

@RenderSection("scripts", required: false)

Có lẽ một ví dụ nhỏ về cách sử dụng nó?

Câu trả lời:


287

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


20

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ị.


16
điều này LAF không đúng. Bạn nên tự mình thử câu trả lời và bạn sẽ nhận thấy rằng bạn sẽ nhận được Section not defined: "scripts".khi hiển thị trang Giới thiệu của mình khi đặt cờ yêu cầu true.
cgijbels

Chỉ cần làm rõ. Không phải là "tập lệnh" thay vì "Tập lệnh" sao?
SRIDHARAN

2

Đâ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 falseboolean để 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.


2

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 : truethà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)
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.