Подтвердить что ты не робот

Что означает этот код рендексирования?

Я новичок в 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 и как мне найти то, что здесь отображается?

4b9b3361

Ответ 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.