Использование _ViewStart в областях для вложенного контента - PullRequest
6 голосов
/ 16 февраля 2012

У меня есть _ViewStart, определяющий главный макет для моего проекта (верхний и нижний колонтитулы).

В этом проекте у меня есть несколько областей. Каждая область имеет одинаковый верхний и нижний колонтитулы, а также свое собственное боковое меню. Для этого я создал _ViewStart в корневом каталоге этой области. Вот (упрощенный) код:

/ Views / _ViewStart.cshtml

@{
   Layout = "~/Views/Shared/_Layout.cshtml";
}

/ Views / Shared / _Layout.cshtml

    <html>
        <div>
            //header
        </div>
        <div>
            @RenderBody
        </div>
    </html>

Площадь Foo -> /Areas/Foo/Views/_ViewStart.cshtml

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="row">
<div class="sidemenu">
    //default sidemenu for this area
</div>
<div>
        @RenderBody()
</div>
</div>

Страница /Areas/Foo/Views/Bar/Index.cshtml не будет отображаться, и я получаю эту ошибку:

CS0103: имя RenderBody не существует в текущем контексте

Как добиться такого типа вложенности главной страницы?

1 Ответ

9 голосов
/ 16 февраля 2012

Я не хочу отвечать на мой собственный вопрос, но здесь он звучит так:

Вы не можете ссылаться на корень _ViewStart сайта непосредственно на _ViewStart вашего региона, если вы хотите, чтобы там был RenderBody.

Таким образом, решение:

/ Views / _ViewStart.cshtml ссылки / Views / Shared / _MainLayout.cshtml

/ Области/Foo/Views/_ViewStart.cshtml ссылается / Areas / Foo / Views / Shared / _AreaLayout.cshtml

/ Areas / Foo / Views / Shared / _AreaLayout.cshtml ссылки / Views / Shared / _MainLayout.cshtml

И это все.Вы должны использовать папку «Shared», чтобы метод «RenderBody ()» был доступен.

...