MVC 4 @Scripts "не существует"

Я только что создал проект ASP.NET MVC 4 и использовал Visual Studio 2012 RC для создания представлений Controller и Razor для Index и Create Actions.

Когда я пришел для запуска приложения и просмотрел представление Create, была показана следующая ошибка:

Сообщение об ошибке компилятора: CS0103: Имя "Сценарии" не существует в текущий контекст

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

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

Почему скрипты не существуют?

Я посмотрел на базовый класс веб-страницы в Assembly System.Web.Mvc.dll, v4.0.0.0

Я вижу доступные вспомогательные свойства:

  • Ajax
  • Html
  • Url

Но ничего не именуется "Сценарии".

Любые идеи?

EDIT:

Мой файл Web.config выглядит так (нетронутый от того, который создал Visual Studio):

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

РЕДАКТИРОВАТЬ № 2:

Люди ведут блог об использовании помощника @Scripts:

Однако, только установив Visual Studio 2012 RC на новую установку Windows 8, я все еще не могу использовать @Scripts, хотя Visual Studio добавляет его в сгенерированный View!

Решения представлены ниже.

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

Ответ 1

Ключ здесь - добавить

 <add namespace="System.Web.Optimization" /> 

к BOTH файлам web.config. Мой сценарий состоял в том, что у меня была ссылка System.Web.Optimization как в проекте, так и в main/root web.config, но @Scripts все еще работали неправильно. Вам нужно добавить ссылку пространства имен в файл Views.config, чтобы она работала.

UPDATE:

Поскольку выпуск MVC 4 System.Web.Optimization теперь устарел. Если вы начинаете с чистого решения, вам нужно будет установить следующий пакет nuget:

Install-Package Microsoft.AspNet.Web.Optimization

Вам все равно придется ссылаться на System.Web.Optimization в ваших файлах web.config. Для получения дополнительной информации см. Эту тему:

Как добавить ссылку на System.Web.Optimization для приложения MVC-3 с преобразованием в 4

Как указывалось многими, после выполнения вышеуказанных шагов может потребоваться перезапуск VS .

Ответ 2

@Styles и @Scripts - 2 новых помощника, предоставляемых библиотекой System.Web.Optimization. Как следует из названия, они связывают и минимизируют файлы и ресурсы CSS и JavaScript соответственно.

Попробуйте включить пространство имен System.Web.Optimization либо директивой @using, либо через web.config

http://ofps.oreilly.com/titles/9781449320317/ch_ClientOptimization.html#BundlingAndMinification

UPDATE

Microsoft переместила пакет/минирование в отдельный пакет под названием Microsoft.AspNet.Web.Optimization. Вы можете загрузить сборку из nuget.

Этот пост будет полезен вам.

Ответ 3

Из приведенного выше был один небольшой шаг, который я нашел в другом посте. После добавления

<add namespace="System.Web.Optimization" />

в ваши пространства имен ~/Views/web.config, закрыть и повторно открыть Visual Studio. Это то, что я должен был сделать, чтобы это работало.

Ответ 4

Я использую области и только что столкнулся с этой проблемой, я просто скопировал пространства имен из корневого web.config в веб-области. config, и теперь он работает!!

    <add namespace="System.Web.Helpers" />
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Optimization" />        
    <add namespace="System.Web.Routing" />
    <add namespace="System.Web.WebPages" />

Ответ 5

У меня была такая же проблема, и я использовал WinMerge, чтобы помочь мне отслеживать это. Но поскольку я исследовал это больше, я обнаружил, что у Рика есть идеальное сообщение в блоге для этого.

Резюме:

  • Добавить <add namespace="System.Web.Optimization"/> в оба файла web.config
  • Выполнить Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
  • Обновить код объединения
  • Обновить файл макета
  • Последний шаг - обновить 10 других библиотек. Я этого не делал, и все нормально. Похоже, вы можете отложить это (если я уже не обновил 1 или более из них).:)

Ответ 6

У меня была такая же проблема:

Версия System.Web.Optimization, которую я использовал, устарела для MVC4 RC.

Я обновил свои пакеты, используя диспетчер пакетов в VS 2010.

В этом блоге MSDN, г-н Энди рассказывает о том, как обновить ваш проект MVC 4 Beta до MVC 4 RC. Для обновления моих пакетов для меня были решены сценарии (особенно веб-оптимизация):

Чтобы установить последний пакет System.Web.Optimization, используйте консоль диспетчера пакетов (Инструменты → Диспетчер пакетов библиотек → Консоль диспетчера пакетов) и выполните следующую команду:

Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization

Используйте файл System.Web.Optimization, содержащийся в пакете в ваших ссылках.

Чтобы обновить другие пакеты: Меню "Сервис" → "Диспетчер пакетов библиотеки" → "Управление пакетами NuGet для решения".

Ответ 7

Создайте новое интернет-приложение MVC 4 RC и запустите его. Перейдите в Login, который использует тот же код

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

Что позволяет Login.cshtml работать, это файл Views\Web.config(а не корневая версия приложения) содержит

<namespaces>

    <add namespace="System.Web.Optimization"/>

  </namespaces>

Почему ваше представление Create не работает и Login?

Ответ 8

Импортируйте System.Web.Optimization поверх вашего вида бритвы следующим образом:

@using System.Web.Optimization

Ответ 9

Я столкнулся с этой проблемой, однако, выполняя команду:

Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization 

Я получил загадочное сообщение (должен любить отличный каламбур перед первой чашкой кофе):

Install-Package: указанный криптографический алгоритм не поддерживается на этой платформе.

Я запускаю это на Windows XP SP3 (не по выбору), и я обнаружил, что я должен был следовать инструкциям, опубликованным пользователем artsnob на Форум ASP.NET

  • Удалите Nuget и попробуйте повторно установить его. Если вы не можете это сделать, войдите в систему как администратор.
  • Перейдите в Tools = > Extension Manager = > Выберите "Nuget Package Manager" = > UnInstall
  • Установите его снова, выполнив поиск "Nuget" = > Install.
  • Если это не сработало, попробуйте установить версию 1.7.x, как я упоминал в предыдущем сообщении (это не значит, что вы должны использовать предыдущую версию, если она работает нормально, мы можем сообщить об этой ошибке, и получить исправления для последней версии).

Как только я запустил это, я смог запустить командную строку для обновления Web.Optimization.

Надеюсь, это спасет кого-то копания.

Ответ 10

Просто напишите

@section Scripts{
    <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script>
}

Ответ 11

Я обновился с Beta до RC и столкнулся с "Scripts", не существует проблемы. Серфинг по всему Интернету и окончательное решение - это то, что сказал N40JPJ плюс еще один workaroudn:

Скопируйте следующее в View\Web.config:

  <namespaces>
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Routing" />
    <add namespace="System.Web.Optimization"/>
    <add namespace="System.Web.Helpers"/>
  </namespaces>

и следующие внутри View\Shared_Layout.cshtml

@if (IsSectionDefined("scripts")) 
{
       @RenderSection("scripts", required: false)
}

Надеюсь, что это поможет.

Ответ 12

  • : удалить страницу просмотра.
  • : добавить пространство имен webconfig (в каталоге просмотра)
  • : создать представление попробовать!

удачи...

Ответ 13

У меня была очень похожая ошибка при обновлении проекта с MVC3 на MVC4.

Сообщение об ошибке компилятора: CS0103: имя [blah] не существует в текущий контекст

В моем случае у меня были устаревшие номера версий в нескольких моих Web.Configs.

  • Мне нужно было обновить номер версии System.Web.Mvc с "3.0.0.0" до "4.0.0.0" в каждом Web.Config в моем проекте.
  • Мне нужно было обновить все мои номера System.Web.WebPages, System.Web.Helpers и System.Web.Razor с "1.0.0.0" до "2.0.0.0" в каждом Web.Config в моем проекте.

Пример:

<configSections>
  <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  </sectionGroup>
</configSections>

...

<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </assemblies>
</compilation>

Обязательно просмотрите Web.Configs в каждом из ваших представлений.

Вы можете узнать больше о Обновление проекта ASP.NET MVC 3 для ASP.NET MVC 4.

Ответ 14

Очевидно, вы создали "пустой" тип проекта без папки "Scripts". Мой совет -создайте тип проекта "Basic" с полными папками "Scripts".

В отношении всех разработчиков.

Ответ 15

просто удалите/скройте код, создав и отредактируйте вид бритвы вашего контроллера.

 @section Scripts {  

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

Ответ 16

Еще один для банка - потраченных возрастов, пытающихся решить ту же проблему - хотя он был определен в файле web.config для root и корневого представления Views. Оказывается, я ошибочно добавил его в элемент <system.web><pages><namespaces>, а не <system.web**.webPages.razor**><pages><namespaces>.

На самом деле легко пропустить это!

Ответ 17

Когда я вхожу на страницу, которая имеет этот код:

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

Произошла эта ошибка: Ошибка. При обработке вашего запроса произошла ошибка.

И это исключение записывается в мои журналы:

System.Web.HttpException (0x80004005): The controller for path '/bundles/jqueryval' was not found or does not implement IController.
   em System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType)
...

Я пробовал все советы на этой странице, и никто из них не решил для меня. Поэтому я просмотрел папку "Пакеты" и заметил, что у меня есть две версии для System.Web.Optmization.dll:

  • Microsoft.AspNet.Web.Optimization.1.1.0 (v1.1.30515.0 - 68,7KB)
  • Microsoft.Web.Optimization.1.0.0-бета (v1.0.0.0 - 304KB)

Мой проект ссылался на старую бета-версию. Я только изменил ссылку на более новую версию (69KB), и все было хорошо.

Я думаю, что это может помочь кому-то.

Ответ 18

Это имеет очевидное решение. У меня была такая же проблема позже. Не связано с ссылками на сборку или....Это произойдет в иерархическом вызове MVC Partial views, когда у вас сложная структура страницы. Поэтому вызов/рендеринг каждой части отдельно на каждой странице (возможно, на главной странице или частичной) приведет к тому, что не будет отображаться требуемая часть страницы, например, следующий код:

@RenderSection("Scripts", required: false)

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

Итак, я предлагаю вам трассировать ваши страницы (например, трассировку программы) от мастера до всех его партикулов до Обнаружение зависимостей. Может быть, это ужасная работа, но здесь нет других вариантов.

Не то, что, по моему опыту, некоторые условные ситуации в программировании заставляют не показывать вам правильную ошибку, вызывающую проблему.

Ответ 19

У меня возникла эта проблема после того, как я добавил область в проект, который его не имел. Чтобы избавиться от него, просто скопировал файл web.config с корневой папкой Views в папку Views области и начал работать.

Ответ 20

Я решаю эту проблему в MvcMusicStore, добавив эту часть кода в _Layout.cshtml

@if (IsSectionDefined("scripts")) 
{
       @RenderSection("scripts", required: false)
}

и удалите этот код из Edit.cshtml

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

Запустите программу inshallah, которая будет работать с вами.

Ответ 21

Для меня это решило проблему, в консоли менеджера пакетов NuGet напишите следующее:

update-package microsoft.aspnet.mvc -reinstall

Ответ 22

Когда я впервые начал использовать MVC4, я столкнулся с вышеупомянутой проблемой при создании проекта с пустыми шаблонами. Шаги по устранению проблемы.

  • Перейти к TOOLSLibrary Package ManagerPackager Manager Console Вставьте команду ниже и нажмите клавишу ввода. Install-Package Microsoft.AspNet.Web.Optimization Примечание: подождите успешной установки.
  • Перейти к файлу Web.Config на корневом уровне и добавить ниже пространство имен в разделе пространства имен страниц. добавить <namespace="System.Web.Optimization" />
  • Перейдите в папку Web.Config в папке Views и выполните шаг 2.
  • Создайте решение и запустите.

Пакет, упомянутый на шаге 1, добавит несколько системных библиотек в ссылки на решения, такие как System.Web.Optimization не является ссылкой по умолчанию для пустых шаблонов в MVC4.

Надеюсь, это поможет. Спасибо вам

Ответ 23

Попробуйте следующее:

@section Scripts 
{
    Scripts.Render("~/bundles/jqueryval")  // <- without ampersand at the begin
}