Я видел эту статью в блоге для приложения ASP.NET MVC . Автор ScottGu добавляет @section
в Index.cshtml.
У меня есть пара вопросов (относящихся к статье выше):
- Является ли Index.cshtml общим представлением?
- В примере кода используется
@section
код в конкретном представлении. Зачем?
Может кто-нибудь объяснить, почему и когда я буду использовать @section
в представлении?
asp.net-mvc
Поддельный
источник
источник
Ответы:
@section
предназначен для определения содержимого, которое переопределяется из общего представления. По сути, это способ настроить ваше общее представление (аналогично мастер-странице в веб-формах).Вы можете найти статью Скотта Гу об этом очень интересной .
Изменить: на основе дополнительных разъяснений вопроса
@RenderSection
Синтаксис переходит в Shared View, такие как:Затем это будет помещено в ваше представление с
@Section
синтаксисом:В MVC3 + вы можете либо определить файл макета, который будет использоваться непосредственно для представления, либо вы можете иметь представление по умолчанию для всех представлений.
Общие параметры представления могут быть установлены в _ViewStart.cshtml, который определяет представление макета по умолчанию, подобное этому:
Вы также можете настроить общий вид для использования непосредственно в файле, например index.cshtml, как показано в этом фрагменте.
Есть множество способов отрегулировать этот параметр, и еще несколько, упомянутых в этом ответе SO .
источник
Хороший пример - Javascript. Вы хотите, чтобы это было внизу страницы, отображаемой в браузере, потому что это лучшая практика.
Как бы вы сделали это из представления на основе макета / мастер-страницы, где вы можете получить доступ только к середине страницы?
Вы делаете это, объявляя раздел Scripts внизу страницы Layout. Затем вы можете добавить контент, в этом случае Javascript включает (я надеюсь!), Со страницы просмотра в нижнюю часть страницы макета.
источник
Вы хотите использовать разделы, когда хотите, чтобы небольшой фрагмент кода / контента отображался в заполнителе, который был определен на странице макета.
В конкретном примере, который вы связали, он определил RenderSection в _Layout.cshtml. Любое представление, использующее этот макет, может определять @section с тем же именем, которое определено в макете, и оно заменит вызов RenderSection в макете.
Возможно, вам интересно, откуда мы знаем, что Index.cshtml использует этот макет? Это связано с некоторыми соглашениями MVC / Razor. Если вы посмотрите на диалоговое окно, в котором он добавляет представление, будет отмечено поле «Использовать макет или главную страницу», а чуть ниже него написано «Оставить пустым, если он установлен в файле Razor _viewstart». Это не показано, но внутри этого файла _ViewStart.cshtml есть код вроде:
Принцип работы viewstart заключается в том, что любой файл cshtml в том же каталоге или дочерних каталогах запускает ViewStart до того, как он запустится сам.
Это говорит нам о том, что Index.cshtml использует Shared / _Layout.cshtml.
источник
Он позволяет вам определять
@Section
код в вашем шаблоне, который затем можно включить в другие файлы. Например, на боковую панель, определенную в шаблоне, можно ссылаться в другом включенном представлении.Надеюсь это поможет.
источник