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

Следующие разделы были определены, но не были отображены для страницы макета "~/Views/Shared/_Layout.cshtml": "Скрипты"

Я новичок в ASP MVC и использую учебник "Введение в ASP MVC 4" http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4

Я сталкиваюсь с ошибкой, в которой я не могу найти ответа, и у меня нет большого опыта в программировании, поэтому я не знаю, где даже начать исправление этого перехода с помощью учебника. Я ценю любую помощь, которую вы можете предоставить.

Я нахожусь в доступе к данным модели из раздела "Контроллер", и я получаю эту ошибку, когда пытаюсь создать фильм в качестве части учебника, я нажимаю ссылку "Создать новый", и я получаю следующая ошибка

Следующие разделы были определены, но не были отображены для страницы макетa > "~/Views/Shared/_Layout.cshtml": "Скрипты"

Вместо использования Visual Studio express я решил загрузить Visual Studio 2012 RC (не уверен, что это будет основной причиной моей проблемы.

Я понимаю, что вы можете потребовать от меня включить код, чтобы ответить на этот вопрос, но я не уверен, какой код даже включить. Пожалуйста, сообщите, какой код мне нужно включить, если он есть, и я буду рад добавить его к моему вопросу.

Спасибо,

4b9b3361

Ответ 1

Это означает, что вы определили раздел в своем мастере Layout.cshtml, но вы не указали ничего для этого раздела в вашем представлении.

Если ваш _Layout.cshtml имеет что-то вроде этого:

@RenderSection("scripts")

Затем все представления, которые используют этот макет , должны включать @section с тем же именем (даже если содержимое раздела пуст):

@{
    ViewBag.Title = "Title";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@section scripts{
    // Add something here
}

В качестве альтернативы, вы можете установить значение false, тогда вам не потребуется добавлять раздел в каждый вид,

@RenderSection("scripts", required: false)

а также вы можете обернуть @RenderSection в блок if,

@if (IsSectionDefined("scripts"))
{
    RenderSection("scripts");
}

Ответ 2

Кроме того, вы можете добавить следующую строку в _Layout.cshtml или _Layout.Mobile.cshtml:

@RenderSection("scripts", required: false)

Ответ 3

У меня был случай с 3 уровнями a'la _MainLayout.cshtml < --- _Middle.cshtml < --- Page.cshtml. Даже при этом:

_MainLayout.cshtml

<head>
   @RenderSection("head", false)
</head>

_Middle.cshtml

@section head {
    @RenderSection("head")
}

и в Page.cshtml, определяющем

@section head {
   ***content***
}

Я все равно получаю ошибку

Определены следующие разделы, но не были отображены для страницы макета "~/Views/Shared/_Middle.cshtml": "head".

Выключено, ошибка заключалась в том, что Middle.cshtml полагался на /Views/_ViewStart.cshtml  для разрешения его родительского макета. Проблема была решена путем определения этого в Middle.cshtml явно:

@{
Layout = "~/Views/_Shared/_MainLayout.cshtml";
}

Невозможно решить, будет ли это по дизайну или ошибка в MVC 4 - во всяком случае проблема была решена:)

Ответ 4

Я не уверен, почему принятый ответ был принят, если предлагаемое решение не помогло и не решило проблему. На самом деле могут быть две связанные проблемы, связанные с этой темой.

Проблема № 1

Основная страница (например, _Layout.cshtml) имеет определенный раздел и требуется, но наследующие представления не реализовали ее. Например,

Шаблон компоновки

<body>
    @* Visible only to admin users *@
    <div id="option_box"> 
        @* this section is required due to the absence of the second parameter *@
        @RenderSection("OptionBox") 
    </div>
</body>

Наследующий вид

Не нужно указывать какой-либо код, просто учтите, что на представлении нет @section OptionBox {}.

Ошибка при выпуске # 1

Section not defined: "OptionBox ".

Проблема № 2

Основная страница (например, _Layout.cshtml) имеет определенный раздел и требуется И, наследующий вид сделал. Однако в представлении реализации есть дополнительные разделы script, которые не определены на (любой) своей главной странице.

Шаблон компоновки

same as above

Наследующий вид

<div>
  <p>Looks like the Lakers can still make it to the playoffs</p>
</div>
@section OptionBox {
<a href"">Go and reserve playoff tickets now</a>
}
@section StatsBox {
<ul>
    <li>1. San Antonio</li>
    <li>8. L. A. Lakers</li>
</ul>
}

Ошибка при выпуске # 2

The following sections have been defined but have not been rendered for the layout page "~/Views/Shared/_Layout.cshtml": "StatsBox"

Проблема с OP аналогична проблеме №2, и принятый ответ относится к проблеме № 1.

Ответ 5

Я думаю, что наше решение было достаточно отличным от всех elses, поэтому я запишу его здесь.

У нас есть настройка Main layout, промежуточная компоновка, а затем рендеринг страницы окончательного действия. Main.cshtml < - Config.cshtml < - Action.cshtml

Только когда web.config имел customErrors='On/RemoteOnly', мы получили пользовательскую ошибку и не вызывали никаких исключений и Application_Error. Я мог поймать это на строке Layout = null в Error.cshtml. Исключение было как в вопросе, так и в разделе пропущенных скриптов.

Мы определили его в Main.cshtml(с обязательным: false), а Action.cshtml не было ничего, что было написано в разделе сценариев.

Решение заключалось в том, чтобы добавить @section scripts { @RenderSection("scripts", false) } в Config.cshtml.

Ответ 6

Это происходит в основном, когда _Layout.cshtml отсутствует:

@RenderSection("scripts", required: false)

или

@RenderSection("scripts")  

БЕЗ

required: false

Итак, просто добавьте   @RenderSection ( "скрипты", обязательно: false) в _Layout.cshtml и он работает специально для тех разработчиков, которые работают с теневыми проектами Kendoui.

Ответ 7

Похоже, что существует несоответствие между файлами View, которые некоторые версии Visual Studio автоматически генерируют для вас, когда вы используете его для создания новой модели. Я столкнулся с этой проблемой, используя новую версию VS 2013 Community Edition и прохожу через учебник W3Schools по адресу http://www.w3schools.com/aspnet/mvc_app.asp, но приведенные выше комментарии указывают на то, что это не проблема с инструкциями руководства или с одной версией VS.

Правда, вы можете сделать сообщение об ошибке уйти, просто удалив

@Scripts.Render("~/bundles/jqueryval")

из макетов создания/редактирования, которые были созданы с помощью Visual Studio.

Но это решение не устраняет первопричину или оставляет вас в хорошем месте, чтобы сделать больше, чем завершить прохождение учебника. В какой-то момент (возможно, довольно рано) при разработке реального приложения вам захочется получить доступ к коду проверки jquery, который устраняет решение для комментирования из вашего приложения.

Если вы используете VS для создания новой модели для вас, она также создает набор из пяти файлов View: Create, Delete, Details, Edit и Index. Два из этих представлений "Создание и редактирование" предназначены для того, чтобы пользователь мог добавлять/редактировать данные для полей в записях базы данных, лежащих в основе модели. Для этих представлений в реальном приложении вы, вероятно, захотите выполнить некоторую проверку данных, используя библиотеку проверки jquery, прежде чем сохранять запись в db. Вот почему VS добавляет следующие строки

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

до дна этих двух видов, а не других. Автогенерированный код пытается сделать библиотеку валидации доступной для этих представлений, но не для других.

Ошибка происходит потому, что VS либо не добавляет соответствующую строку в общий файл _Layout.cshtml, либо, см. один ответ выше, добавляет его, но оставляет его закомментированным. Эта строка

@RenderSection("scripts", required: false)

Если некоторые из ваших представлений имеют раздел сценариев (как это делают Create и Edit do), должна быть команда RenderSection, встроенная в макет. Если в некоторых сценариях есть раздел, а некоторые - нет (поскольку Delete, Details и Index этого не делают), команда RenderSection должна иметь параметр required: false.

Итак, лучшее решение, если вы хотите сделать что-то большее, чем просто завершить прогулку по учебнику, заключается в том, чтобы добавить оператор в _Layout.cshtml, чтобы не удалять код из представлений "Редактировать" и "Создать".

P.S. Здесь немного путаницы, что требуется в "комплекте", и оператор require выглядит так, будто пытается включить файл в папку пакетов, которая не существует в вашем проекте. Но для отладочных сборников и обучающих программ это не имеет значения, так как вложенные файлы включаются по одному за раз. См.: http://www.asp.net/mvc/overview/performance/bundling-and-minification В данном коде кратко говорится о двух трети пути вниз по странице.

Ответ 8

Во время работы с ASP.NET MVC 4 Tutorial с Visual Studio 2012 я столкнулся с той же ошибкой в ​​разделе "Доступ к данным модели из раздела контроллера". Исправление довольно просто.

При создании нового веб-приложения ASP.NET MVC 4 в Visual Studio 2012 в документе _Layout.cshtml в общей папке раздел "скрипты" закомментирован.

    @*@RenderSection("scripts", required: false)*@

Просто не комментируйте строку, и образец кода должен работать.

    @RenderSection("scripts", required: false)

Ответ 9

У меня такая же проблема при реализации учебника для новичков MVC. Мне было предложено изменить @RenderSection в файле layout.cshtml, но я его не использовал.

У меня много поиска, и я обнаружил, что тег script, сгенерированный в (View/Edit.cshtml) и другом файле cshtml, не выполняет рендеринг

**@section Scripts {
@Scripts.Render("~/bundles/jqueryval")

} **

Итак, я удалил эти строки, и приложение начало работать плавно.

Ответ 10

Я искал ошибку в сети и пришел на эту страницу. Я использую Visual Studio 2015, и это мой первый проект MVC.

Если вы пропустите символ @перед секцией рендеринга, вы получите ту же ошибку. Я хотел бы поделиться этим для будущих новичков.

 @RenderSection("headscripts", required: false)

Ответ 11

У меня возникает ощущение, что вы передаете свой раздел из @section в файле _Layout, который ссылается на частичный вид с помощью @section, т.е. вы вложили @section в @section. В файле _Layout удалите @section вокруг rendersection.

Ответ 12

Пожалуйста, убедитесь, что вы набрали правильное написание с использованием script в разделе

правильный

@section scripts{ //your script here}

если вы набрали @section script{ //your script here}, это неверно.

Ответ 13

проверьте наложение и верхний/нижний регистр термина ""

когда мы пишем   @RenderSection ( "name", required: false) убедитесь, что вид бритвы содержит раздел  @section name {} так проверьте написание и верхний/нижний регистр термина " "В этом случае правильным является" Скрипты"