Я новичок в ASP MVC и использую учебник Intro to ASP MVC 4 Beta http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet -mvc-4
Я сталкиваюсь с ошибкой, на которую я не могу найти ответа, и у меня нет большого опыта программирования, поэтому я даже не знаю, с чего начать, чтобы исправить это, переходя к руководству. Я ценю любую помощь, которую вы можете оказать.
Я нахожусь в разделе «Доступ к данным вашей модели из контроллера», и я получаю эту ошибку, когда пытаюсь создать фильм в рамках учебного курса, я нажимаю ссылку «Создать новый» и получаю следующую ошибку
Следующие разделы были определены, но не были обработаны для страницы макета> "~ / Views / Shared / _Layout.cshtml": "Scripts"
Вместо использования Visual Studio Express я решил загрузить Visual Studio 2012 RC (не уверен, что это будет основной причиной моей проблемы.
Я понимаю, что вы можете потребовать от меня включить код, чтобы ответить на этот вопрос, но я не уверен, какой код вообще включать. Посоветуйте, пожалуйста, какой код мне нужно включить, если таковой имеется, и я с радостью добавлю его в свой вопрос.
Спасибо,
источник
@section
который НЕ отображается в макете (сRenderSection
). Это может произойти, если вы указали неправильнуюLayout
ссылку или вообще забыли сослаться на макет. См . Ответ @ vonvОтветы:
Это означает, что вы определили раздел в своем основном Layout.cshtml, но вы не включили ничего для этого раздела в свое представление.
Если в вашем _Layout.cshtml есть что-то вроде этого:
Затем все представления, использующие этот макет, должны включать в себя объект
@section
с тем же именем (даже если содержимое раздела пусто):В качестве альтернативы вы можете установить для required значение false, тогда вам не нужно будет добавлять раздел в каждый View,
или также вы можете обернуть его
@RenderSection
вif
блок,источник
, required: false)
создания@RenderSection("scripts", required: false)
позволит включить его или нет.@RenderSection("scripts", required: false)
вставка в сгенерированный _Layout.cshtml - правильное решение. (См. Объяснение ниже, почему.) Таким образом вы можете добавить исправление в один файл, а не во все - в основном исправление DRYer.Также вы можете добавить следующую строку в
_Layout.cshtml
или_Layout.Mobile.cshtml
:источник
У меня был случай с 3 уровнями a'la _ MainLayout.cshtml <--- _ Middle.cshtml <--- Page.cshtml . Хотя делаю вот так:
_MainLayout.cshtml
_Middle.cshtml
и в Page.cshtml определяя
Я бы все равно получил ошибку
Оказалось, ошибка заключалась в том, что Middle.cshtml полагался на /Views/_ViewStart.cshtml для разрешения его родительского макета. Проблема была решена путем явного определения этого в Middle.cshtml :
Не могу решить, было ли это задумкой или ошибкой в MVC 4 - все равно проблема была решена :)
источник
@section Foo {@RenderSection("Foo")}
«пропустить» разделы! Также пришлось сдать кузов с@RenderBody()
.Я не уверен, почему принятый ответ был принят, если предложенное решение не помогло и не решило проблему. На самом деле, с этой темой могут быть две связанные проблемы.
Выпуск # 1
На главной странице (например
_Layout.cshtml
) есть определенный раздел, и он является обязательным, но наследующие представления не реализовали его. Например,Шаблон макета
Наследующий вид
Нет необходимости показывать какой-либо код, просто учтите, что в представлении нет реализации
@section OptionBox {}
.Ошибка для выпуска №1
Section not defined: "OptionBox ".
Выпуск # 2
На главной странице (например
_Layout.cshtml
) есть определенный раздел, и он является обязательным, И наследующее представление его реализовало. Однако реализующее представление имеет дополнительныеscript
разделы, которые не определены (ни на одной из) его главных страниц.Шаблон макета
same as above
Наследующий вид
Ошибка для выпуска №2
The following sections have been defined but have not been rendered for the layout page "~/Views/Shared/_Layout.cshtml": "StatsBox"
Проблема OP аналогична проблеме № 2, и принятый ответ относится к проблеме № 1.
источник
Я думаю, что наше решение существенно отличалось от всех остальных, поэтому я задокументирую его здесь.
У нас есть настройка основного макета, промежуточного макета, а затем финального рендеринга страницы действия. Main.cshtml <- Config.cshtml <- Action.cshtml
Только когда web.config имел
customErrors='On/RemoteOnly'
пользовательскую ошибку, и не было вызвано никаких исключенийApplication_Error
. Я мог уловить этоLayout = null
в файле Error.cshtml. Исключение было, как в вопросе, раздел отсутствующих скриптов.У нас он был определен в Main.cshtml (с required: false), а Action.cshtml не содержал ничего, что было написано в разделе скриптов.
Решение было добавить
@section scripts { @RenderSection("scripts", false) }
в Config.cshtml.источник
Обычно это происходит, когда _Layout.cshtml не содержит:
или с
БЕЗ
Итак, просто добавьте @RenderSection ("scripts", обязательно: false) в _Layout.cshtml, и он будет работать специально для тех разработчиков, которые работают с проектами, созданными Кендоуи.
источник
Похоже, что существует несоответствие между файлами просмотра, которые некоторые версии Visual Studio автоматически генерируют для вас, когда вы используете его для создания новой модели. Я столкнулся с этой проблемой, используя новую версию VS 2013 Community Edition и просматривая учебник W3Schools на http://www.w3schools.com/aspnet/mvc_app.asp, но комментарии выше показывают, что это не проблема с инструкциями руководства или с единая версия VS.
Это правда , что вы можете сделать сообщение об ошибке исчезнет , только удаление
@Scripts.Render("~/bundles/jqueryval")
строка из макетов создания / редактирования, которые были автоматически созданы Visual Studio.
Но это решение не устраняет основную причину и не дает вам возможности сделать больше, чем завершить изучение руководства. В какой-то момент (вероятно, довольно рано) в разработке реального приложения вам понадобится доступ к коду проверки jquery, который решение для комментирования удаляет из вашего приложения.
Если вы используете VS для создания новой модели, он также создает набор из пяти файлов просмотра: Create, Delete, Details, Edit и Index. Два из этих представлений, Create и Edit, позволяют пользователю добавлять / редактировать данные для полей в записях базы данных, которые лежат в основе модели. Для этих представлений в реальном приложении вы, вероятно, захотите выполнить некоторый объем проверки данных с помощью библиотеки проверки jquery, прежде чем сохранять запись в db. Вот почему VS добавляет следующие строки
к нижней части этих двух представлений, а не других. Автоматически сгенерированный код пытается сделать библиотеку проверки доступной для этих представлений, но не для других.
Ошибка возникает из-за того, что VS либо не добавляет соответствующую строку в общий файл _Layout.cshtml, либо, см. Один ответ выше, добавляет ее, но оставляет ее закомментированной. Эта линия
@RenderSection("scripts", required: false)
Если в некоторых из ваших представлений есть раздел сценариев (как в случае создания и редактирования), в макет должна быть встроена команда RenderSection. Если в некоторых сценариях есть раздел, а в некоторых нет (как, например, Delete, Details и Index), команда RenderSection должна иметь
required: false
параметр.Итак, лучшее решение, если вы хотите сделать что-то большее, чем просто закончить изучение руководства, - это добавить оператор в _Layout.cshtml, а не удалять код из представлений Edit и Create.
PS Это немного сбивает с толку, здесь то, что требуется, находится в «пакете», а оператор require выглядит так, как будто он пытается включить файл в папку пакетов, которая не существует в вашем проекте. Но для отладочных сборок и руководств это не актуально, поскольку связанные файлы включаются по одному. См .: http://www.asp.net/mvc/overview/performance/bundling-and-minification . Код, о котором идет речь, кратко упоминается примерно на двух третях страницы.
источник
Во время работы с учебником по ASP.NET MVC 4 с Visual Studio 2012 я обнаружил ту же ошибку в разделе «Доступ к данным вашей модели из контроллера». Исправить довольно просто.
При создании нового веб-приложения ASP.NET MVC 4 в Visual Studio 2012 в документе _Layout.cshtml в общей папке раздел «сценарии» закомментирован.
Просто не комментируйте строку, и образец кода должен работать.
источник
У меня такая же проблема при реализации учебника для начинающих MVC. У меня было несколько предложений по изменению @RenderSection в вашем файле layout.cshtml, но я не использовал его.
Я много искал, а потом обнаружил, что тег скрипта, созданный в (View / Edit.cshtml) и другом файле cshtml, не отображает
} **
Я удалил эти строки, и приложение начало работать нормально.
источник
У меня такое ощущение, что вы визуализируете свой раздел из @section в файле _Layout, который ссылается на частичное представление с @section, то есть вы вложили @section в @section. В файле _Layout удалите @section вокруг рендеринга.
источник
Я также прокомментировал ** @ section Scripts, что все работает нормально. :)
источник
Я поискал ошибку в сети и зашел на эту страницу. Я использую Visual Studio 2015, и это мой первый проект MVC.
Если вы пропустите символ @ перед разделом рендеринга, вы получите ту же ошибку. Хочу поделиться этим с будущими новичками.
источник
Я решил эту проблему, используя следующее:
источник
Для меня проблема была в моем _Layout.cshtml, у меня есть RenderSection внутри условия
и с точки зрения моего ребенка это было без условий
поэтому, независимо от темы, дочерний элемент добавлял нижний колонтитул. Но в родительском элементе, когда тема не является красной или зеленой, она не добавляла нижний колонтитул и создавалось необработанное исключение.
источник
проверьте орфографию и верхний / нижний регистр термина ""
когда мы пишем @RenderSection ("name", обязательно: false), убедитесь, что представление бритвы содержит раздел @section name {}, поэтому проверьте орфографию и верхний / нижний регистр термина "" Правильным в данном случае является "Скрипты"
источник
Убедитесь, что вы ввели правильное написание при использовании раздела сценария в представлении
правильно
если вы ввели
@section script{ //your script here}
это неправильно.источник