Ім'я 'ViewBag' не існує у поточному контексті - Visual Studio 2015


97

Я знову починаю розвиватися в ASP.NET, і я зіткнувся з невеликою помилкою у Visual Studio. Мої файли .cshtml відображають помилки під час використання декількох функцій бритви. Наприклад, "Назва 'ViewBag' не існує у поточному контексті". Ось малюнок:

скріншот проблеми в Visual Studio 2015

Я використовую демонстраційний проект. Ви можете знайти проект тут: https://github.com/Wintellect/Angular-MVC-Cookbook/tree/master/BasicProject

Я переглянув кілька інших тем, і більшість пропонують оновити файли web.config. Ці 2 конфігураційні файли вже є, і оскільки це досить популярна демонстраційна версія, я припускаю, що в ній є всі необхідні конфігурації. Я, звичайно, переглянув ці конфігураційні файли, і вони справді містять запропоновані рішення.

Інші деталі:

  • Я вже використовував чисте та відновлення рішення, але це нічого не змінило.
  • Коли я створюю абсолютно новий проект MVC, він працює
  • У мого друга така сама проблема, і ми обидва використовуємо VS 2015 та Windows 10
  • Я все ще можу запустити програму, і вона працює.

Заздалегідь спасибі.


Коли він все ще працює, це просто помилка у фоновому компіляторі. Спробуйте видалити файл .suo <Ім'я проекту>.
Хенк Холтерман

який проект ти запускаєш? основний? сирий, маршрутизація?
Прашант Гіміре

1
@Henk, на жаль, це не спрацювало.
Michjuh

@Prashant Я спробував як базовий проект, так і проект маршрутизації. Проблема виникає в обох.
Michjuh

Ви це вирішили? У мене була така сама проблема @Michjuh
Burk

Відповіді:


123

У мене була ця проблема, незважаючи на те, що я маю всю правильну конфігурацію.

Виявилося, що в кеші компонентів є деякі погані файли, що заважають представленням Razor розпізнавати ViewBag, Model та HtmlHelpers . Видалення цих файлів вирішило проблему (хороші версії цих файлів були створені наступного разу, коли я відкрив Visual Studio).

Файли знаходяться тут:

%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache

Видаліть усі чотири файли:

  • Microsoft.VisualStudio.Default.cache
  • Microsoft.VisualStudio.Default.catalogs
  • Microsoft.VisualStudio.Default.err
  • Microsoft.VisualStudio.Default.external

Згодом я бачив ту саму проблему на декількох інших машинах розробників, і це виправлення швидко вирішує її.


9
Чудово, це вирішило проблему для мене. Я також виявив, що видалення тимчасових файлів ASP.NET також допомагає. C: \ Users \ your.name.here \ AppData \ Local \ Temp \ Temporary ASP.NET Files
Кевін,

Це було виправленням і для мене. Дякуємо за публікацію!
Каверман

Це виправило мою проблему, спричинену оновленням .net 4 до 4.5.2 та оновленням mvc 3 до 5
Джо Філліпс,

Моя проблема полягала в тому, що властивості моєї моделі не розпізнавалися. Це виправлення негайно вирішило мою проблему.
jkerak

5
моя папка 15.0_7e8de76c \ ComponentModelCache для VS 2017.
Кевін .NET

40

Оновіть номери версій у налаштуваннях web.configфайлу в папці Views.

 <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

Якщо ви оновили версію MVC через nuget, має бути:

 <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

Можливо, доведеться оновити й інші версії залежностей. Проблеми з компіляцією та простором імен у поданнях для помічників та об’єктів MVC, як правило, пов’язані з переплутаними web.configфайлами в папках перегляду.


8
Це спрацювало для мене, хоча мені довелося ввести номер версії 5.2.0.0 замість 5.2.2.0. Ви можете побачити, яка у вас версія, перейшовши до Посилання> System.Web.MVC та вибравши Властивості. Дякуємо за допомогу
user2233949

@ user2233949, @Benjamin Я використовую версію MVC 4.0.0.0, я бачив це за властивостями. Що має бути виправлення в моєму випадку?
Zeeshan

Перевірте всі файли web.config і переконайтесь, що всі вони використовують правильну версію хосту. Іноді, коли у вас замінено налаштування в папках із переглядом, проблема може уникнути, не виправляючись.
Бенджамін Андерсон,

1
Я спробував усі інші пропозиції, але ця спрацювала для мене за допомогою 5.2.3.0. Дякую Бенджамін
Мітч

1
Це була правильна відповідь для мене. Крім того, після зміни web.config, не забудьте закрити всі ваші *.cshtmlі *.vbhtmlфайли і очистити і відновити рішення. VS 2019 16.1.2
Štěpán Havránek

22

Знайдіть "веб-сторінки: версія" у налаштуваннях програми та оновіть її до версії 3.0.0.0. Мій web.config мав

<add key="webpages:Version" value="2.0.0.0" />

і я оновив його до

<add key=”webpages:Version value=”3.0.0.0 />

1
Я видалив обидва рядки (
webpages.Version, webpages.Enabled

Це також слід оновити в обох версіях Web.config, кореня проекту та Web.configs будь-якої області.
Sonu K

Дякую. У моєму випадку проблемні теги знаходяться в <configuration> - <configSections> - <sectionGroup name = "system.web.webPages.razor"> Мені потрібно змінити <sectionGroup name = "system.web.webPages.razor">, <section name = "host"> та <section name = "pages"> використовувати Версію = 3.0.0.0
Гонг

Видалення кешу з будь-якого місця (у тому числі Temporary ASP.NET Files) не допомогло, але ця відповідь допомогла .
wha7ever

Що цей параметр навіть означає ? Що це відповідає? Як визначити, від якої версії програми ви залежате?
jpmc26,

17

Я випадково видалив web.configз Viewsпапки, думаючи, що це непотрібно. Коли я повернув його, він почав працювати.


13

Перепробувавши всі під сонцем, то виходить, що - то змінило мої System.Web.WebPages.Razor <sectionGroup>ін /Views/Web.Configвід належного CamelCase System.Web.WebPages.Razorна все-рядковий , system.web.webpages.razorяка в кінцевому рахунку була моя смертю.

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

Для довідки, це правильний запис (для мого сценарію)

<sectionGroup name="System.Web.WebPages.Razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 

3
У мене все було малою літерою, але не вирішило моєї проблеми.
Пол Тоцке,

Короп святий. Це також була моя загибель. Я не вірю, що ти це виявив, @jbwedtech.
Люк Пуплетт

У мене це теж було малими літерами, і зміна регістру не вирішило проблему.
Енді Браун,

5

Іноді недостатньо змінити номери версій у налаштуваннях web.config. Ця проблема виникає, оскільки Visual Studio 2015 не має інструментів mvc4.

Рішенням є оновлення вашого проекту до MVC 5. Це повністю вирішує проблему. Ви можете отримати допомогу на цій сторінці. Це чітко це пояснює.

http://www.asp.net/mvc/overview/releases/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web- api-2

До речі, команда Visual Studio заявила, що з першим оновленням додасть підтримку mvc4 до Visual Studio 2015.


5

Я стикався з цією проблемою більше разів, і нарешті я виявив, що це сталося, тому що папка подань повинна містити це власну веб-конфігурацію


2
Але що має бути в цій web.config? Чи не слід його генерувати автоматично? (Оновлення) Знайдено , що це повинно бути і як це генерується stackoverflow.com/questions/29305914 / ...
drzaus

Так, ви маєте рацію, у моєму проекті Web.Config раніше не існував (так, він повинен генеруватися автоматично, але взяв проект у попереднього розробника, не знаючи, чому він його видалив). Після додавання файлу Web.Config для папок Views він запрацював.
user3559462

2

пізно до гри, але жодне з цих рішень не спрацювало для мене.

Я перейшов на VS 2017, і сайт запрацював, але компілятор Visual Studio зламав більшість файлів .cshtml

TLDR;

mysolution.sln мав неправильну версію

слн різниця

тож ви хочете створити нове рішення із новішими VS та порівняти його із вашим та скопіювати інформацію про версію.

повні кроки оновлення:

  1. переконайтеся, що файл .sln має правильну версію для VS
  2. клацніть правою кнопкою миші MySolution у VS> Nuget Manager> Оновлення> запустіть усі оновлення
  3. клацніть правою кнопкою миші MySolution у VS> Application> update Target Framework (4.5.2 у моєму випадку)
  4. виправити будь-які проблеми з версіями у файлах .config (тобто RAZOR до 3.0.0.0)
  5. виправити будь-які проблеми з кодом у компіляторі (для мене ForEach був неоднозначним)

Мій проект був розпочатий у VS2013, коли я потрапив у VS2017, я почав бачити ці помилки, але все скомпільовано нормально, тому я намагався зрозуміти, що відбувається, але не надто важко. Це стало проблемою через те, що відкриття подання створило велику кількість помилок. Я зараз на VS2019 і натрапив на ваше виправлення; ти рок! Мій .sln мав 14.0.25123.0 і повинен був бути 16.3.9. Я також виправив будь-які проблеми з версією в рамках. Мені не потрібно було оновлювати nuget-пакети (на щастя), оскільки я не маю часу повністю перевірити всі оновлення.
DaBlue

1

Я даремно витратив на це робочий день. Я спробував усе в цій (та інших) публікаціях, але безрезультатно. Зрештою я зрозумів, що мені потрібно відкрити проект по-іншому. Я щойно оновив існуючий веб-сайт до Visual Studio 2015, MVC5, .NET framework 4.5.2 і використовую Windows 10, але підозрюю, що відповідь була б однаковою для інших версій кожного програмного забезпечення.

Отже, це варіант меню, який я вибрав, щоб відкрити веб-сайт:

введіть тут опис зображення

Замість цього я відкрив файл csproj, що визначає проект, використовуючи цей пункт меню:

введіть тут опис зображення

Тоді я мав варіант "чистого рішення", про який посилаються багато інших людей:

введіть тут опис зображення

Однак мені це навіть не потрібно було - все просто працювало! Ну, я все одно перейшов до наступного набору проблем ...


1

Я додав контролер

  • Крок 1: Додати> Клас
  • Крок 2: UserController
  • .
  • .
  • .

створений відповідний код:

namespace SampleApp.Controllers
{
    public class UserController {
    }
}

Мої помилки змінились, змінивши крок 1 як:

  • Крок 1: Додати> Контролер
  • Крок 2: Контролер користувача
  • .
  • .
  • .

створений відповідний код:

namespace SampleApp.Controller {
    public class UserController : Controller {
    }
}

Проблема полягала в тому, що я не успадкував свій клас від Controller

До моєї помилки входили й інші повідомлення - усі вони були з цієї проблеми:

помилка CS0117: 'ModelState' не містить визначення для 'IsValid'

помилка CS0103: Ім'я 'RedirectToAction' не існує в поточному контексті

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

помилка CS0103: Назва "ViewBag" не існує в поточному контексті

помилка CS0103: Ім'я 'Json' не існує в поточному контексті

Сподіваюся, ця зміна допоможе тим, хто не звернув уваги на своїх початкових кроках.


1

Спробувавши принаймні 90% кожного рішення / хитрості цієї теми (та інших), я нарешті вирішив це !! Спойлер сповіщення, від логіки сліду немає, є наступне так зване "рішення": Запуск рішення з усіма закритими вкладками нарешті спрацював, коли ніщо інше не пошкодувало б мене "ViewBag & Co не існує в поточному контексті" ... Вас попередили, ніякої дивної логіки!

Сподіваюся, це колись допоможе комусь ^^


1

У моєму випадку ця проблема траплялася лише на моєму ПК лише для одного проекту. Мій проект справно працював у VS2012, але при відкритті у VS2017 у нього була ця проблема.

Основним питанням для мене тут був кеш. Мій проект вказував на старіші кешовані версії dll для Razor та MVC, і він не знаходив функцій, доданих у новіших версіях, таких як ViewBag. ViewBag був доданий у версію Razor 3, але оскільки у мене була кешована версія 2 Razor, він не зміг знайти ViewBag (але міг знайти інші речі, які були у версії 2). Однак просто очищення кешу, як у прийнятій відповіді, не вирішило моєї проблеми. Нам довелося змінити конфігураційні файли, щоб сказати "використовувати версію 3 замість 2" для Razor і "використовувати версію 5 замість 4" для MVC, потім закрити VS, видалити кеш, відкрити проект і відновити. Потім все виправилось. Нижче наведено більш докладні інструкції.

Ось послідовність змін, які допомогли мені вирішити проблему:

  1. У папці "Views" Web.config змініть усі місця, де
    • Версія MVC встановлена ​​на 4.0.0.0 - 5.0.0.0
    • Версія Razor встановлена ​​на 2.0.0.0 - 3.0.0.0

Ось такі рядки в моєму випадку:

<sectionGroup name="system.web.webPages.razor" type="... Version=3.0.0.0 ...">
    <section name="host" type="... Version=3.0.0.0 ..." .../>
    <section name="pages" type="... Version=3.0.0.0 ..." .../>
</sectionGroup>
...
<host factoryType="... System.Web.Mvc, Version=5.0.0.0 ..." />
...
<pages
    ...
    pageParserFilterType="... Version=5.0.0.0 ..."
    pageBaseType="... Version=5.0.0.0 ..."
    userControlBaseType="... Version=5.0.0.0 ...">
    <controls>
        <add assembly="... Version=5.0.0.0 ..." ... />
    </controls>
</pages>

(примітки: 1) ваші версії можуть бути різними, я просто розповідаю, що потрібно було зробити в моєму випадку 2) Я пропустив деякі речі з "..." для стислості 3) навіть якщо у вас версія MVC приблизно на зразок 5.3.2.0 ви все одно повинні ввести 5.0.0.0, те саме з версією Razor - ввести всі нулі в 3.0.0.0)

  1. У головному конфігураційному файлі (на верхньому рівні) змініть значення webPages:versionз 2.0.0.0 на 3.0.0.0.

  2. Ця зміна, ймовірно, не вплинула на рішення, але я все одно згадаю про це. Переконайтеся, що <namespaces>розділ папки "Views" має такий самий вміст, як основний файл .conifg у корені проекту, приблизно так:

<namespaces>
    <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" />
</namespaces>
  1. Нарешті, закрийте VS. Видаліть усі файли кеш-пам’яті %LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache(або будь-який ваш правильний шлях) так само, як це запропоновано у (на даний момент) прийнятій відповіддю Фентона. Також видаліть .scanфайл, навіть якщо він не згадується у цій відповіді. Закінчивши, відкрийте VS, очистіть свій проект і відновіть його. Зараз справи повинні працювати. У мене це спрацювало.

0

Вимкнення та ввімкнення знову працювало для мене. Ви можете спробувати перезапустити Visual Studio.


Звучить як жарт, але це те, що мені виправило.
Дуглас Тіммс,

0

Я зміг вирішити проблему, додавши наступне у верхню частину моєї сторінки .cshtml

@{ViewBag.Title = "Title";}

Після перекомпіляції я зміг видалити цей рядок, і помилка зникла.


0

Я зіткнувся з подібною проблемою з одним зі свого погляду. У моєму випадку я просто очистив рішення і спробував відновити його та його роботи.



0

Я зіткнувся з тим же питанням. Я спробував рішення «Очистити, побудувати та відновити», але мені не вдалося.

Тож нарешті я зробив, як показано нижче:

  1. Натисніть клавішу Windows + R
  2. Введіть % temp%
  3. Натисніть Enter
  4. Видалити всі файли (якщо залишилося кілька файлів, які не видалено, проблем немає)

Сподіваюся, це спрацює і на вас, хлопці.


0

Після оновлення однієї програми мого клієнта з ASP MVC 4 до ASP MVC 5, у нас виникли помилки дизайнерів, пов’язані з Html Helpers та ViewBag на сторінках cshtml.

Щоб виправити ці проблеми, переконайтеся, що ви робите наступне: Встановіть Asp.NET Web Helpers Library з Nuget Відкрийте Web.config проекту та оновіть прив’язки, якщо вони не були оновлені під час встановлення пакетів Nuget, наприклад

<dependentAssembly>
  <assemblyIdentity name=”System.Web.Mvc publicKeyToken=”31bf3856ad364e35 />
  <bindingRedirect oldVersion=”0.0.0.0-5.2.2.0 newVersion=”5.2.2.0 />
</dependentAssembly>

Знайдіть webpages : Version” у налаштуваннях програм та оновіть його до версії 3.0.0.0. Мій web.config мав

і я оновив його до

Перезапустіть Visual Studio та відновіть. Можливо, вам доведеться видалити папку bin для вашого проекту

Відвідайте це: https://lajak.wordpress.com/2014/11/16/asp-mvc-5-viewbag-does-not-exist-in-the-current-context/


-1

Спробувавши все інше і відчуваючи розчарування, я оновив фреймворк .NET у своєму додатку MVC5 з 4.5 на 4.5.2. Якось це виправило мою проблему. Сподіваюся, це допомагає.


-4

Я вирішив заміну в web.config

 <add key="webpages:Enabled" value="false" />

з

 <add key="webpages:Enabled" value="true" />

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