Следующие разделы были определены, но не были отображены для страницы макета "~/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 (не уверен, что это будет основной причиной моей проблемы.
Я понимаю, что вы можете потребовать от меня включить код, чтобы ответить на этот вопрос, но я не уверен, какой код даже включить. Пожалуйста, сообщите, какой код мне нужно включить, если он есть, и я буду рад добавить его к моему вопросу.
Спасибо,
Ответы
Ответ 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 {}
так
проверьте написание и верхний/нижний регистр термина " "В этом случае правильным является" Скрипты"