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

Следующие разделы были определены, но не отображены для страницы макета

Это сообщение об исключении 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> 
}
4b9b3361

Ответ 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 гарантирует, что заголовок по умолчанию отображается, когда не определен раздел.