ASP.NET MVC: Яка мета @section? [зачинено]


132

Для програми ASP.NET MVC я побачив цю статтю в блозі . Автор Скоттгу додає @sectionдо Index.cshtml.

У мене є кілька питань (посилаючись на статтю вище):

  • Чи Index.cshtml - це спільний перегляд?
  • У прикладі коду використовується @sectionкод у певному вікні. Чому?

Чи можете мені хтось пояснити, чому і коли я буду використовувати @sectionце в перегляді?


4
Перегляньте цей підручник: weblogs.asp.net/scottgu/archive/2010/12/30/…
Адріано Репетті

1
Хоча можна стверджувати, що кращою причиною закриття сьогодні було б "насамперед на основі думки", воно все одно буде закритим. Не існує остаточного способу використання розділів.
Річард

2
Не існує остаточного способу нічого використовувати. Подивіться, як люди користуються Інтернетом ...
keji

Відповіді:


138

@sectionпризначено для визначення вмісту, що замінює загальний вигляд. В основному, це спосіб налаштувати ваше спільне подання (подібно до Основної сторінки у веб-формах).

Можливо, ви знайдете написання Скотта Гу на цьому дуже цікавому .

Редагувати: На підставі додаткового уточнення питання

@RenderSectionСинтаксис переходить в Shared View, такі як:

<div id="sidebar">
    @RenderSection("Sidebar", required: false)
</div>

Потім він буде розміщений у вашому поданні із @Sectionсинтаксисом:

@section Sidebar{
    <!-- Content Here -->
}

У MVC3 + ви можете або визначити файл макета, який буде використовуватися безпосередньо для перегляду, або ви можете мати перегляд за замовчуванням для всіх представлень.

Загальні параметри подання можна встановити в _ViewStart.cshtml, який визначає подання макета за замовчуванням, подібне до цього:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

Ви також можете встановити загальний вигляд використовувати безпосередньо у файлі, наприклад, index.cshtml безпосередньо, як показано в цьому фрагменті.

@{
    ViewBag.Title = "Corporate Homepage";
    ViewBag.BodyID = "page-home";
    Layout = "~/Views/Shared/_Layout2.cshtml";
}

Існує безліч способів коригування цього параметра за допомогою ще кількох згаданих у цій відповіді ТА .


Дякую, Фрейзелл! До свого запитання я додав ще більше посилання на цей підручник. Чи можете ви пояснити далі? Знову дякую!
Богус

Привіт @ABogus Я оновив відповідь. Сподіваємось, ця додаткова інформація є корисною :)
Фрейзел Томас

21

Хороший приклад - Javascript. Ви хочете, щоб це було внизу сторінки, що відображається в браузері, оскільки це найкраща практика.

Як би ви це зробили з представлення даних на основі макета / головної сторінки, де ви можете отримати доступ лише до середини сторінки?

Виконуєте це, оголосивши розділ "Сценарії" внизу сторінки "Макет". Потім ви можете додати вміст, у цьому випадку Javascript включає (сподіваюся!), Зі своєї сторінки перегляду до нижньої частини сторінки вашого макета.


4

Ви хочете використовувати розділи, коли потрібно трохи коду / вмісту відобразити у заповнювачі, визначеному на сторінці макета.

У конкретному прикладі, який ви пов’язали, він визначив RenderSection у _Layout.cshtml. Будь-який вигляд, який використовує цей макет, може визначити те ж ім'я @section, яке визначено у макеті, і він замінить виклик RenderSection у макеті.

Можливо, вам цікаво, як ми знаємо, що Index.cshtml використовує цей макет? Це пов'язано з дещо конвенцією MVC / Razor. Якщо ви подивитеся на діалогове вікно, де він додає перегляд, встановлено прапорець "Використовувати макет або головну сторінку", а трохи нижче в ньому написано "Залишити порожнім, якщо він встановлений у файлі _viewstart файла Razor". Він не відображається, але всередині цього файла _ViewStart.cshtml є такий код:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

Спосіб роботи переглядачів полягає в тому, що будь-який файл cshtml в межах одного каталогу або дочірніх каталогів запускає ViewStart перед тим, як він запускається сам.

Що говорить нам про те, що Index.cshtml використовує Shared / _Layout.cshtml.


Приємне пояснення _ViewStart.
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

3

Це дозволяє визначити @Sectionкод у вашому шаблоні, який ви можете потім включити до інших файлів. Наприклад, бічна панель, визначена в шаблоні, може посилатися на інший включений вигляд.

//This could be used to render a @Section defined as @Section SideBar { ...
@RenderSection("SideBar", required: false);

Сподіваюся, це допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.