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

Проблема с RenderSection() в _ViewStart.cshtml

У меня есть следующий код, отрезанный в _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

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

4b9b3361

Ответ 1

_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>

Ответ 2

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

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

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