Следующие разделы были определены, но не отображены для страницы макета
Это сообщение об исключении ASP.NET MVC 3. Что он говорит? Что мне делать?
ОК, у меня есть этот код:
@{
Layout = "~/_Layout.cshtml";
Page.Title = "Home";
}
@section meta{
<meta name="keywords" content="" />
<meta name="description" content="" />
}
<h2>Html Content Here</h2>
@section footer {
<script src="http://code.jquery.com/jquery-latest.min.js" charset="utf-8"></script>
<script type="text/javascript">
$(document).ready(function() {
});
</script>
}
Ответы
Ответ 1
Ваша страница макета фактически не отображает разделы footer
и meta
В вашем _Layout.cshtml введите @RenderSection("meta")
, где вы хотите, чтобы мета-раздел был рендерен.
Вы также можете сделать @RenderSection("meta", false)
, чтобы указать, что раздел является необязательным.
Ответ 2
Сообщение об ошибке означает, что ваш _Layout.cshtml
не включает операторы @RenderSection
для @section
, которые у вас есть в вашем представлении.
Проверьте свой макет и сообщите нам.
Для получения дополнительной информации см. эту страницу.
Ответ 3
Я столкнулся с аналогичной проблемой, когда шаблон макета действительно имеет @RenderSection(...)
, но внутри if-else statement
. Поэтому, когда страница выполняет оператор, который не содержит @RenderSection
, он выкинет это исключение. Если это ваш случай, то ваше решение немного сложнее:
- убедитесь, что у вас есть
@RenderSection
вне операторов или
- repeat
@RenderSection
в операторах if-else или
- использовать разные частичные представления или
- перепроектировать макет.
Это может быть вашей главной проблемой!
Ответ 4
Когда я получил эту ошибку, я пытался условно включить раздел в мой макет, когда он был определен в представлении. Вот макет:
@if (IsSectionDefined("header"))
{
RenderSection("header");
}
else
{
Html.RenderPartial("_Header");
}
Я думаю, что @Jaider упоминает об этом и в своем ответе, но вы не можете поместить RenderSection
внутри оператора if. Способ достижения моей цели состоял в том, чтобы инвертировать параметр if и установить для параметра required
значение false в методе RenderSection
:
@RenderSection("header", false);
@if (!IsSectionDefined("header"))
{
Html.RenderPartial("_Header");
}
Если никакая настройка не определена, первая строка не сделает ничего, а оператор If гарантирует, что заголовок по умолчанию отображается, когда не определен раздел.
Ответ 5
обычно эта ошибка возникает, если вы не пишете код для раздела, который требуется вашей главной макет-страницей
Ссылка: https://ziaahmedshaikh.wordpress.com/2016/02/17/the-following-sections-have-been-defined-but-have-not-been-rendered-for-the-layout-page/