Допустим, у меня есть следующая структура в приложении ASP.NET MVC 3.
- Элементы
- Категории
- Общие
- _Index.cshtml
- _Site.cshtml
- Index.cshtml
Оба файла Index.cshtml
используют _Index.cshtml
в качестве страницы макета, а _Index
вложен в макет _Site
.
Items/Index
реализует дополнительные разделы, определенные в _Index
.Shared/Index
пусто.
Представление Items/Index
работает нормально.Поскольку у Категорий нет Индекса, он использует тот, который находится в общей папке.Это не работает.
Выдает ошибку
Метод "RenderBody" не был вызван для страницы макета "~ / Views / Shared / _Index.cshtml".
Если _Site
вызывает RenderBody
, а _Index
наследует от _Site
, разве содержание в _Index
не удовлетворяет требуемому вызову RenderBody
и Shared/Index.cshtml
может быть пустым?
Причина, по которой я спрашиваю, заключается в том, что у меня есть приложение ASP.NET MVC 1, в котором эта структура реализована с использованием главных страниц, и она работала нормально, но преобразование ее в MVC 3 с помощью Razor вызывает эту проблему.
Вот основная схема того, что я описываю:
_Site.cshtml
<!DOCTYPE html>
// head
<body>
@RenderBody()
</body>
_Index.cshtml
@{
Layout = "~/Views/Shared/_Site.cshtml";
}
<div id="sub-menu">
// Markup
</div>
// More markup
@RenderSection("SectionOne", required: false)
@RenderSection("SectionTwo", required: false)
Items / Index.cshtml (Рабочая)
@{
Layout = "~/Views/Shared/_Index.cshtml";
}
@section SectionOne {
// Markup
}
Shared / Index.cshtml (ошибка RenderBody)
@{
Layout = "~/Views/Shared/_Index.cshtml";
}
// Rest of this file is empty