Що таке @RenderSection в asp.net MVC


170

Яка мета @RenderSection та як вона функціонує? Я розумію, що роблять пакети, але мені ще належить з'ясувати, що це робить, і це, мабуть, важливо.

@RenderSection("scripts", required: false)

Можливо, невеликий приклад того, як ним користуватися?

Відповіді:


287

Якщо у вас такий вид _Layout.cshtml, як це

<html>
    <body>
        @RenderBody()
        @RenderSection("scripts", required: false)
    </body>
</html>

то ви можете мати такий вигляд вмісту index.cshtml, як це

@section scripts {
     <script type="text/javascript">alert('hello');</script>
}

потрібно вказує , є чи вид з допомогою сторінки макета повинні мати розділ скриптів


20

Якщо

(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)", Коли сторінка відображається і користувач знаходиться на сторінці, контакти.js не відображаються.

    <html>
        <body><div>About<div>             
        </body>
        <script type="text/javascript" src="~/lib/layout.js"></script>
    </html>

якщо для цього потрібно встановити значення "@RenderSection (" скрипти ", обов'язкові: істинно)", Коли сторінка відображається і користувач знаходиться на сторінці ПРО ПРОГРАМУ, контакти.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>

В КОРОТКІ, якщо встановлено значення true , потрібен він вам чи ні на інших сторінках, воно все одно буде відображено. Якщо встановлено значення false , воно відображатиметься лише тоді, коли буде надана дочірня сторінка.


16
це не правильно. Спробуйте відповісти самостійно, і ви помітите, що Section not defined: "scripts".під час встановлення потрібного прапорця ви отримаєте під час надання своєї сторінки About true.
cgijbels

Просто уточнення. Чи не повинні це бути "скрипти" замість "Сценарії"?
СРІДГАРАН

2

Тут визначення рендесекції від MSDN

На сторінках макета відображає вміст названого розділу. MSDN

На сторінку _layout.cs помістити

@RenderSection("Bottom",false)

Тут візуалізується вміст завантажувального розділу та вказується falseбулева властивість, щоб вказати, потрібен чи ні розділ.

@section Bottom{
       This message form bottom.
}

Це означає, що якщо ви хочете отримати нижній розділ на всіх сторінках, тоді ви повинні використовувати false як другий параметр методу рендесекції.


2

Припустимо, чи є у мене GetAllEслуees.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>
    }

І ще один перегляд "GetEposleeeDetails.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)

Отже, коли я переходжу до GetEposleeeDetails.cshtml. Я отримую помилку в тому, що в GetE zaposeeDetails.cshtml немає сценаріїв розділів, які потрібно візуалізувати. Якщо я поміняю прапор @RenderSection()з required : true"на обов'язково: помилково". Це означає візуалізацію сценаріїв, визначених у сценаріях @section для представлень, якщо вони є. Також нічого не робити. І вдосконалений підхід був би в _layout.cshtml

@if (IsSectionDefined("Scripts"))
    {
        @RenderSection("Scripts", required: true)
    }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.