Что означает этот код рендексирования?
Я новичок в Asp.Net MVC3. Может кто-нибудь объяснить, что подразумевается под этим кодом:
@section head
{
@RenderSection("head", false)
}
В статье ScottGu:
http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx
есть пример RenderSection, но он определяет @section, а затем используется где-то @RenderSection. В этом случае глава раздела определена, и внутри этого самого создается одна и та же голова, которая меня путала.
Что делает RenderSection и как мне найти то, что здесь отображается?
Ответы
Ответ 1
Скотт написал в один момент
Первый параметр вспомогательного метода RenderSection() указывает имя раздела, который мы хотим отобразить в этом месте в шаблоне макета. Второй параметр является необязательным и позволяет нам определить, требуется ли раздел, который мы отображаем, или нет. Если раздел "обязателен", то Razor выдаст ошибку во время выполнения, если этот раздел не реализован в шаблоне представления, основанном на файле макета (что может упростить отслеживание ошибок содержимого).
Итак, то, что делает RenderSection, это рендеринг раздела, определенного в шаблоне/представлении (не в общем _Layout). Немного ниже в разделе "Реализация раздела" SideBar "в нашем шаблоне представления" он объясняет, как реализовать раздел.
Итак, в целом, у вас есть раздел, называемый "головой", который визуализирует раздел, называемый "головой", в представлении, которое далее вниз/вложено.
Изменение: посмотрите на http://blogs.msdn.com/b/marcinon/archive/2010/12/15/razor-nested-layouts-and-redefined-sections.aspx, чтобы увидеть, что я имею в виду с помощью вложенных представлений - но учтите, что этой статье уже более года.
MasterLayout:
@RenderSection("head", false)
SubLayout:
@{
Layout = "~/Views/_MasterLayout.cshtml";
}
@section head
{
@RenderSection("head")
}
Содержание:
@{
Layout = "~/Views/_SubLayout.cshtml";
}
@section head
{
<title>Content-Layout</title>
}
Ответ 2
Вы определяете раздел в представлении и визуализируете его в _Layout.cshtml.
На странице макета (мастер) разместите это:
@RenderSection("head", false)
На вашей странице просмотра разместите это:
@section head {
PUT VIEW SPECIFIC CODE HERE
}
Здесь "head" - это название раздела, которое вы можете определить на своей странице просмотра.
Его несколько напоминает ContentPlaceHolder, который мы используем в webforms asp.net.
Ответ 3
Используя @rendersection в вашем файле _Layout, вы можете управлять макетом и порядком разделов в своем основном .cshtml-коде (скажем, он называется index.cshtml)
Например, если у вас есть @RenderSection ("scripts", false) в конце вашего файла _Layout, то даже если раздел "scripts" находится в верхней части ваших файлов index.cshtml, он будет отображаться в нижней части, Таким образом гарантируется, что все разделы скрипта загружаются согласованно во всем приложении.
Если в будущем вы по какой-либо причине решили переместить все сценарии в раздел, вы можете легко сделать это, просто переместив одну строку кода в файл _Layout.