ASP.NET MVC объяснение @section
Для приложения ASP.NET MVC, может кто-нибудь объяснить, почему и когда я буду использовать @section
в представлении?
Я видел в этом примере, он добавляет @section
в Index.cshtml. Является ли Index.cshtml общим представлением? Что в примере кода говорит "Использовать код @section
в этом представлении, но не в этом представлении?".
Ответы
Ответ 1
@section
для определения содержимого переопределяются из общего представления. В принципе, это способ настроить общий вид (аналогично главной странице в веб-формах).
Вы можете найти Скотт Гу напишите об этом очень интересном.
Изменить: на основе дополнительного уточнения вопроса
Синтаксис @RenderSection
переходит в общий вид, например:
<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";
}
Существует множество способов, которыми вы можете настроить этот параметр с помощью еще нескольких, упомянутых в этом SO-ответе.
Ответ 2
Хорошим примером является Javascript. Вы хотите, чтобы это было в нижней части страницы, которая отображается в браузере, потому что это лучшая практика.
Как вы сделаете это из представления на основе макета/главной страницы, где вы можете получить доступ только к середине страницы?
Вы делаете это, объявляя раздел "Сценарии" в нижней части страницы "Макет". Затем вы можете добавить контент, в этом случае Javascript включает (надеюсь!), Со страницы просмотра в нижней части страницы вашего макета.
Ответ 3
Вы хотите использовать разделы, если хотите, чтобы фрагмент кода/содержимого отображался в заполнителе, который был определен на странице макета.
В конкретном примере, который вы связали, он определил RenderSection в _Layout.cshtml. Любое представление, которое использует этот макет, может определить @-сечение с тем же именем, которое определено в макете, и оно заменит вызов RenderSection в макете.
Возможно, вам интересно, как мы знаем, что Index.cshtml использует этот макет? Это связано с несколькими соглашениями MVC/Razor. Если вы посмотрите на диалоговое окно, в котором он добавляет представление, будет установлен флажок "Использовать макет или главную страницу", а чуть ниже этого: "Оставьте пустым, если он установлен в файле Razor _viewstart". Он не отображается, но внутри этого файла _ViewStart.cshtml есть код:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
Работа в режиме просмотра выглядит так: любой файл cshtml в одном каталоге или дочерних каталогах запускает ViewStart до того, как он запустится.
Вот что говорит нам, что Index.cshtml использует Shared/_Layout.cshtml.
Ответ 4
Он позволяет вам определить @Section
кода в вашем шаблоне, который затем можно включить в другие файлы. Например, боковая панель, определенная в шаблоне, может быть указана в другом включенном представлении.
//This could be used to render a @Section defined as @Section SideBar { ...
@RenderSection("SideBar", required: false);
Надеюсь, что это поможет.