MVC 4 @Scripts "не існує"


201

Я щойно створив проект ASP.NET MVC 4 і використав Visual Studio 2012 RC для створення представлень контролера та бритви для Index та Createдій.

Коли я прийшов запустити програму та переглянув Createперегляд, з’явилася така помилка:

Повідомлення про помилку компілятора: CS0103: Назва "Сценарії" не існує в поточному контексті

Проблема полягає в наступному коді, який автоматично було додано внизу перегляду:

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

Чому сценаріїв не існує?

Я переглянув базовий клас веб-сторінок у Assembly System.Web.Mvc.dll, v4.0.0.0

Я бачу доступні такі помічні властивості:

  • Аякс
  • Html
  • URL-адреса

Але нічого не назвали Сценарії.

Будь-які ідеї?

Редагувати:

Мій файл 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 додає його до створеного перегляду!

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

Я не впевнений, як це закрити, оскільки врешті оновлення, здавалося, вирішило проблему. Я двічі перевірив, чи виконав чисту установку, використовуючи новий проект. Але той самий невдалий проект, який я зробив, працює добре зараз після різних оновлень і без очевидного втручання вручну. Дякую за всі думки, але напевно в цьому була проблема;)


Ви вже спробуєте додати в Web.config? <system.web.webPages.razor> <pages pageBaseType=""> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> etc... </pages>
Zach dev

Я додав розділ з Web.config, але я нічого не змінив у цьому файлі.
FantasticJamieBurns

6
Ви маєте на увазі файл "Мої перегляди \ Web.config", а не корінь програми web.config. У будь-якому випадку це неправильно і відсутнє <add namespace = "System.Web.Optimization" />. Ви встановили VS12 Beta до RC? Яка версія win8?
RickAndMSFT

@RickAndMSFT Я зробив чисту інсталяцію Win8 від ISO Preview Preview ISO, а також установку з VS 2012 RC ISO, щоб переконатися, що це не конфлікт версій.
FantasticJamieBurns

@RickAndMSFT Мої перегляди \ Web.config пропустили б будь-які перегляди в областях
Маслоу

Відповіді:


269

Головне тут - додати

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

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

ОНОВЛЕННЯ:

З моменту випуску системи MVC 4 System.Web.Optimization застаріла. Якщо ви починаєте з чистого рішення, вам потрібно буде встановити наступний пакунок:

Install-Package Microsoft.AspNet.Web.Optimization

Вам все одно потрібно буде посилатися на System.Web.Optimization у файлах web.config. Для отримання додаткової інформації дивіться цю тему:

Як додати посилання на System.Web.Optimization для додатка MVC-3, перетвореного на 4

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


8
Можливо, вам також доведеться запускати Install-Package Microsoft.AspNet.Web.Optimizationпорожній шаблон ASP.NET MVC4, оскільки він за замовчуванням не входить.
Портман

@Portman Так, якщо ви почали з порожнього шаблону проекту MVC, вам потрібно встановити пакет Microsoft.AspNet.Web.Optimization.
Марко

2
Його потрібно лише додати у web.config у папці «Перегляди».
користувач1534664

9
Це справді рішення. Однак мені потрібно було перезапустити візуальну студію, щоб це було розпізнано.
Jason Eades

4
Мені довелося додати це до своєї програми Views / Web.config, а потім перезапустити Visual Studio.
Каверман

48

@Stylesі @Scriptsє двома новими помічниками, наданими System.Web.Optimizationбібліотекою. Як випливає з назви, вони поєднують та мінімізують файли CSS та JavaScript або ресурси відповідно.

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

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

ОНОВЛЕННЯ

Microsoft перемістила пакет / мінімізацію в окремий пакет, який називається Microsoft.AspNet.Web.Optimization. Ви можете завантажити збірку з nuget .

Ця публікація буде корисною для вас.


2
Додавання System.Web.Optimization повідомляє "CS0234: Ім'я типу або простору імен" Оптимізація "не існує в просторі імен" System.Web ". Немає посилання під назвою System.Web.Optimization для додавання будь-якого.
FantasticJamieBurns

1
Простір імен System.Web.Optimization зробив застарілим, оскільки на це відповіли, спробуйте скористатися Microsoft.AspNet.Web.Optimization. Дивіться це запитання для отримання додаткової інформації: stackoverflow.com/questions/9475893/…
Джеремі Джаррелл

3
Уточнення: System.Web.OptimizationПростір імен НЕ застаріло, System.Web.Optimization.dllє.
Деспертар

Дякую! Це працює для мене, коли у мене виникли проблеми з макетом іншої ОБЛАСТІ.
Розробник

48

Від цього було пропущено один невеликий крок, який я знайшов на іншій посаді. Після додавання

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

у ваші ~/Views/web.configпростори імен, закрийте та знову відкрийте Visual Studio. Це я повинен був зробити, щоб це працювало.


2
Тут же працював перезапуск VS, але до цього він все ще показував помилку ...?
Андреас

Закриття VS в моєму випадку не було необхідним, але мені довелося закрити та відкрити перегляд .cshtml, який я використовував
joalcego

29

Я використовую області, і я щойно зіткнувся з цією проблемою, я просто скопіював простори імен з кореневого web.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" />

15

У мене була така ж проблема, і я використав WinMerge, щоб допомогти мені відстежувати це. Але, коли я це більше досліджував, я виявив, що Рік має ідеальний пост для цього блогу .

Підсумок:

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

Дякуємо, що відповіли на цей дан! (І вказуючи на мій блог). Його питання передбачало, що він почав з РК, але я думаю, ти маєш рацію. Він просто додав контролер з RC до бета-проекту.
RickAndMSFT

Минуло пару тижнів, і ви обоє, безперечно, здогадалися про себе. Я звичайно поклав VS 2012 на свій планшет, у якого ніколи не було нічого, крім Metro Apps, і побачив, що він вийшов з ладу. Я спробую ще раз у ВМ.
FantasticJamieBurns

Це працювало для мене. Прочитайте пов'язану статтю, щоб отримати точні вказівки щодо того, що вам потрібно зробити.
Джастін

11

У мене був той самий випуск:

Версія 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 для вирішення.


5

Створіть новий Інтернет-додаток MVC 4 RC та запустіть його. Перейдіть до Логін, який використовує той самий код

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

Що дозволяє Login.cshtml працювати - це файл Views \ Web.config (не коренева версія програми)

<namespaces>

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

  </namespaces>

Чому перегляд "Створити" не працює, а вхід є?


Я не використовував Логін - це, можливо, було порушено на той час.
FantasticJamieBurns

5

Імпортуйте System.Web.Optimization поверх перегляду бритви таким чином:

@using System.Web.Optimization

3

Я зіткнувся з цією проблемою, однак під час виконання команди:

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

Я отримав криптовалютне повідомлення (треба любити велику каламбур перед першою чашкою кави):

Install-Package: Вказаний криптографічний алгоритм не підтримується на цій платформі.

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

  • Видаліть Nuget і спробуйте його знову встановити. Якщо ви не можете цього зробити, увійдіть як адміністратор.
  • Перейдіть до Інструменти => Диспетчер розширень => Оберіть "Nuget Package Manager" => UnInstall
  • Встановіть його ще раз, шукаючи "Nuget" => Встановити.
  • Якщо це не спрацювало, спробуйте встановити версію 1.7.x, як я вже згадував у попередньому дописі (Це не означає, що ви повинні використовувати попередню версію. Якщо вона добре працює, ми можемо повідомити про цю помилку і отримати патчі для останньої версії).

Як тільки я запустив це, я міг запустити командний рядок для оновлення Web.Optimization.

Сподіваюсь, це заощадить когось копати.


2

Просто напишіть

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

@archil Дякую за заміну - це буде хорошим тимчасовим рішенням. Але головне питання було "Чому сценаріїв не існує?"
FantasticJamieBurns

@Jamie це повинно існувати? Я маю на увазі, наскільки я пам’ятаю, там немає помічника Сциптів. Можливо, ви намагаєтесь скористатись стороннім помічником?
архіл

1
Я сам не додав цей код - Visual Studio 2012 RC додав його, коли він створив Вид для моєї дії. Я думаю, що якось мій MVC 4 не є правильним. Це повинно десь працювати, тому що Скотт Хензельман згадує про невдалий синтаксис як нове доповнення до MVC 4 RC: hanselman.com/blog/…
FantasticJamieBurns

1

Я перейшов з бета-версії до RC і зіткнувся з "Сценаріями" не існує проблеми. Займався серфінгом в Інтернеті, і остаточне рішення - це те, про що сказав N40JPJ, а також ще один робочий проект:

Скопіюйте наступне у 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)
}

Сподіваюся, це допомагає.


1
Немає необхідності користуватися, if (IsSectionDefined())якщо ви не надаєте elseпункт. Те, що ви говорите, required: falseвже дозволяє не визначати цей розділ, і в цьому випадку розділ буде опущено. Тож це зайвий додатковий код.
ЕрікЕ

0

Мабуть, ви створили тип проекту "Порожній" без папки "Сценарії". Моя порада - створити тип проекту "Основний" з повною папкою "Сценарії".

З повагою до всіх розробників.


0

просто видаліть / прихойте код зі створення та редагування подання бритви контролера.

 @section Scripts {  

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

0
  1. : видалити сторінку перегляду.
  2. : додати простір імен webconfig (у каталозі перегляду)
  3. : Створити перегляд спробувати!

Щасти...


0

Ще один для горщика - витрачені століття намагаються вирішити ту саму проблему - навіть якщо це було визначено у web.config для кореня та кореня Views. Виявляється, я помилково додав його до елемента <system.web><pages><namespaces>, а не до <system.web**.webPages.razor**><pages><namespaces>елемента.

Дійсно легко пропустити це!


0

Коли я заходжу на сторінку з цим кодом:

@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-beta (v1.0.0.0 - 304KB)

Мій проект посилався на старішу бета-версію. Я лише змінив посилання на новішу версію (69 КБ) і все працювало чудово.

Я думаю, що це може комусь допомогти.


0

Це має очевидне рішення. Пізніше у мене була така ж проблема. Не стосується посилань на збірку або .... Це відбудеться в ієрархічному виклику часткових представлень MVC, коли у вас складні структури сторінок. Таким чином, виклик / рендерінг кожної частини окремо на кожній сторінці (можливо, головна сторінка або часткова) призведе до того, що не відображаються необхідні частини сторінки, як наведено внизу:

@RenderSection("Scripts", required: false)

Це просто змушує сторінку знаходити та візуалізувати пов’язаний розділ, а в разі відмови показує вам повідомлення про помилку, як ви.

Тому я пропоную вам простежити ваші сторінки (як програмні сліди) від ведучого до всіх його частин до Виявити залежності . Можливо, це буде жахлива робота, але інших варіантів тут немає.

Мало того, що, згідно з моїм досвідом, деякі умовні ситуації в програмуванні не викликають правильної помилки, викликає проблему.


0

У мене виникло це питання після того, як я додав область до проекту, у якого його не було. Щоб позбутися від нього, просто скопіювали папку web.config withing root папку Views в папку Views області і вона почала працювати.


0

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

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

і видаліть цей код з Edit.cshtml

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

Запустіть програму, іншалла буде працювати з вами.


0

Для мене це вирішило проблему, в консолі менеджера пакунків NuGet напишіть наступне:

update-package microsoft.aspnet.mvc -reinstall

0

Коли я нещодавно почав використовувати MVC4, зіткнувся з вищезазначеною проблемою під час створення проекту з порожніми шаблонами. Кроки для вирішення проблеми.

  1. Перейдіть TOOLS-> Library Package Manager-> Packager Manager Console Вставте команду нижче та натисніть клавішу Enter Install-Package Microsoft.AspNet.Web.Optimization Примітка: чекайте успішної установки.
  2. Перейдіть у файл Web.Config на кореневому рівні та додайте нижче простір імен у розділ простору імен сторінок. додати<namespace="System.Web.Optimization" />
  3. Перейдіть на Web.Config у папці Views і виконайте крок 2.
  4. Побудуйте рішення та запустіть.

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

Я сподіваюся, що це допомагає. Дякую


0

У мене була дуже схожа помилка при модернізації проекту з MVC3 до MVC4.

Повідомлення про помилку компілятора: CS0103: Ім'я [blah] не існує в поточному контексті

У моєму випадку я мав застарілі номери версій у кількох своїх Web.Configs.

  1. Мені потрібно було оновити номер версії System.Web.Mvc з "3.0.0.0" до "4.0.0.0" у кожному Web.Config в моєму проекті.
  2. Мені потрібно було оновити всі мої версії 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 у кожному із своїх каталогів Views.

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


0

Якщо ви додали до свого web.config і воно все ще відображає повідомлення, тоді вам потрібно закрити проект і знову відкрити його, тепер він буде існувати і @ Styles.Render ("") і @ Scripts.Render () справно працюватимуть.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.