Проблема с RenderSection () в _ViewStart.cshtml - PullRequest
12 голосов
/ 16 ноября 2011

У меня есть следующий код, отсекаемый в _Layout.cshtml

<div id="sub-navig-container">
    @RenderSection("subNavig")
</div>

<div id="text-content">
    @RenderBody()
</div>

, когда я добавляю на мой взгляд

@section subNavig
{
    //some code
}

, это хорошо работает, но когда я пишу это в _ViewStart, у меня естьошибка: Имя 'DefineSection' не существует в текущем контексте enter image description here

Пожалуйста, объясните, почему, и если возможно, сообщите, как я могу исправить эту проблему

Ответы [ 2 ]

21 голосов
/ 16 ноября 2011

_ViewStart - это специальное представление, которое получается из ViewStartPage вместо WebViewPage, из которого происходят другие представления.А у класса ViewStartPage нет метода DefineSection.Таким образом, вы не можете определить разделы в этом файле.Вы можете предоставить содержимое по умолчанию для этого раздела в макете напрямую:

<div id="sub-navig-container">
    @if (!IsSectionDefined("subNavig"))
    {
        // some default code
    }
    else
    {
        // render the code that was overridden in the child view
        @RenderSection("subNavig")
    }
</div>
1 голос
/ 03 мая 2013

Скажем, если RenderSection определен в классе ViewStart, то как движок представления Razor узнает о рендеринге раздела?RenderSection по своему дизайну потребляет только те разделы, которые сразу определяются видом, использующим их.Так как ViewStart запускается до запуска любого запрошенного кода представления, именно поэтому он недоступен.

Это сделано специально.В настоящее время макеты Razor могут потреблять (отображать) только те разделы, которые определены в представлении с их использованием.У вас не может быть иерархии страниц макета, и в самом внешнем макете используется раздел, определенный в самом внутреннем представлении.

http://forums.asp.net/t/1623650.aspx/1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...