Le nom «ViewBag» n'existe pas dans le contexte actuel - Visual Studio 2015

97

Je recommence à développer dans ASP.NET et j'ai rencontré une petite erreur dans Visual Studio. Mes fichiers .cshtml affichent des erreurs lors de l'utilisation de quelques fonctions de rasoir. Par exemple "Le nom 'ViewBag' n'existe pas dans le contexte actuel". Voici une image:

capture d'écran du problème dans Visual Studio 2015

J'utilise un projet de démonstration. Vous pouvez trouver le projet ici: https://github.com/Wintellect/Angular-MVC-Cookbook/tree/master/BasicProject

J'ai parcouru plusieurs autres fils et la plupart suggèrent de mettre à jour le ou les fichiers web.config. Ces 2 fichiers de configuration sont déjà présents et comme c'est une démo assez populaire, je suppose qu'elle contient toute la configuration requise. J'ai bien sûr parcouru ces fichiers de configuration et ils incluent en effet les solutions suggérées.

Autres détails:

  • J'ai déjà utilisé clean & rebuild sur la solution mais cela n'a rien changé.
  • Lorsque je crée un tout nouveau projet MVC, cela fonctionne
  • Mon ami a le même problème et nous utilisons tous les deux VS 2015 et Windows 10
  • Je peux toujours exécuter l'application et cela fonctionne.

Merci d'avance.

Michjuh
la source
Quand il s'exécute encore, c'est juste une erreur dans le compilateur d'arrière-plan. Essayez de supprimer le fichier <Projectname> .suo.
Henk Holterman
quel projet dirigez-vous? basique? crud, routage?
Prashant Ghimire
1
@Henk, malheureusement, cela n'a pas fonctionné.
Michjuh
@Prashant J'ai essayé à la fois le projet de base et le projet de routage. Le problème se produit dans les deux.
Michjuh
L'avez-vous résolu? J'ai eu le même problème @Michjuh
Burk

Réponses:

123

J'ai eu ce problème malgré la configuration correcte.

Il s'est avéré qu'il s'agissait de fichiers défectueux dans le cache de composants, empêchant les vues Razor de reconnaître les ViewBag, Model et HtmlHelpers . La suppression de ces fichiers a résolu le problème (de bonnes versions de ces fichiers ont été créées la prochaine fois que j'ai ouvert Visual Studio).

Les fichiers se trouvent ici:

%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache

Supprimez les quatre fichiers:

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

J'ai par la suite vu le même problème sur plusieurs autres machines de développement et ce correctif le résout rapidement.

Fenton
la source
9
Génial, cela a résolu le problème pour moi. J'ai également constaté que la suppression de vos fichiers ASP.NET temporaires aide également. C: \ Users \ your.name.here \ AppData \ Local \ Temp \ Temporary ASP.NET Files
Kevin
C'était aussi la solution pour moi. Merci d'avoir posté!
Caverman
Cela a résolu mon problème causé par la mise à niveau de .net 4 vers 4.5.2 et la mise à niveau de mvc 3 vers 5
Joe Phillips
Mon problème était que les propriétés de mon modèle n'étaient pas reconnues. Ce correctif a résolu mon problème immédiatement.
jkerak
5
mon dossier est 15.0_7e8de76c \ ComponentModelCache pour VS 2017.
Kevin .NET
40

Mettez à jour les numéros de version dans les paramètres du web.configfichier dans le dossier Vues.

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

Si vous avez mis à jour la version MVC via nuget, devrait être:

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

D'autres versions de dépendances devront peut-être également être mises à jour. Les problèmes de compilation et d'espace de noms dans Views pour les helpers et objets MVC sont généralement liés à des web.configfichiers en désordre dans les dossiers View.

Benjamin Anderson
la source
8
Cela a fonctionné pour moi, même si j'ai dû entrer un numéro de version de 5.2.0.0 au lieu de 5.2.2.0. Vous pouvez voir quelle version vous avez en allant dans Références> System.Web.MVC et en sélectionnant Propriétés. Merci pour l'aide
user2233949
@ user2233949, @Benjamin J'utilise la version MVC 4.0.0.0, je pouvais le voir à partir des propriétés. Quelle devrait être la solution dans mon cas?
Zeeshan
Vérifiez tous vos fichiers web.config et assurez-vous qu'ils utilisent tous la bonne version d'hôte. Parfois, lorsque vous avez remplacé des paramètres dans des dossiers de vue d'ensemble, le problème peut passer sans être corrigé.
Benjamin Anderson
1
J'ai essayé toutes les autres suggestions, mais celle-ci a fonctionné pour moi en utilisant 5.2.3.0. Merci Benjamin
Mitch
1
C'était la bonne réponse pour moi. Aussi après avoir changé le web.config, ne pas oublier de fermer tous vos *.cshtmlet *.vbhtmlfichiers et propre et reconstruire la solution. VS 2019 16.1.2
Štěpán Havránek
22

Recherchez "pages Web: Version" dans les paramètres de l'application et mettez-le à jour vers la version 3.0.0.0. Mon web.config avait

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

et je l'ai mis à jour pour

<add key=”webpages:Version value=”3.0.0.0 />
Damian Green
la source
1
J'ai supprimé les deux lignes (webpages.Version, webpages.Enabled) et semble fonctionner
correctement
Cela devrait être mis à jour dans les deux versions de Web.config, racine du projet et Web.configs de toute zone.
Sonu K
Je vous remercie. Pour mon cas, les balises problématiques sont sous <configuration> - <configSections> - <sectionGroup name = "system.web.webPages.razor"> Je dois changer <sectionGroup name = "system.web.webPages.razor">, <section name = "host"> et <section name = "pages"> pour utiliser Version = 3.0.0.0
Hong
Supprimer le cache n'importe où (y compris Temporary ASP.NET Files) n'a pas aidé, mais cette réponse l'a fait .
wha7ever
Qu'est-ce que ce paramètre même signifie ? A quoi cela correspond-il? Comment déterminez-vous la version dont vous dépendez dans votre application?
jpmc26
17

J'ai accidentellement retiré web.configdu Viewsdossier, pensant que ce n'était pas nécessaire. Quand je l'ai remis, il a commencé à fonctionner.

InGeek
la source
13

Après avoir essayé tout sous le soleil, il se trouve quelque chose avait modifié mon System.Web.WebPages.Razor <sectionGroup>dans /Views/Web.Configdu CamelCase approprié System.Web.WebPages.Razorà un tout minuscule system.web.webpages.razorqui a finalement été ma mort.

En espérant que cela peut aider une autre pauvre âme avec ce problème ...

Pour référence, c'est la bonne entrée (pour mon scénario)

<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"> 
jbwebtech
la source
3
Le mien était tout en minuscules mais n'a pas résolu mon problème.
Paul Totzke
Sainte carpe. Ce fut aussi ma disparition. Je ne peux pas croire que vous ayez découvert ça, @jbwedtech.
Luke Puplett
Moi aussi, je les avais en minuscules, et changer la casse n'a pas résolu le problème.
Andy Brown le
5

Parfois, il ne suffit pas de modifier les numéros de version dans les paramètres de web.config. Ce problème se produit car Visual Studio 2015 ne dispose pas d'outils mvc4.

La solution consiste à mettre à niveau votre projet vers MVC 5. Cela résout totalement le problème. Vous pouvez obtenir de l'aide sur cette page. Cela l'explique clairement.

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

Au fait, l'équipe de Visual Studio a déclaré qu'elle ajouterait la prise en charge de mvc4 à Visual Studio 2015 avec la première mise à jour.

Burk
la source
5

J'ai rencontré ce problème plus de fois et j'ai finalement découvert que cela s'était produit parce que le dossier de vues devrait contenir sa propre configuration Web

hosam tous les jours
la source
2
Mais qu'est-ce qui est censé être dans ce web.config? Ne devrait-il pas être généré automatiquement? (mise à jour) Trouvé ce qu'il devrait avoir et comment il est généré stackoverflow.com/questions/29305914/…
drzaus
Oui, vous avez raison, dans mon projet, Web.Config n'existait pas auparavant (oui, il devrait se générer automatiquement mais a pris un projet du développeur précédent, je ne sais pas pourquoi il l'a supprimé). Après avoir ajouté le fichier Web.Config pour les dossiers Views, cela a fonctionné.
user3559462 le
2

tard dans le jeu, mais aucune de ces solutions n'a fonctionné pour moi.

J'ai mis à niveau vers VS 2017 et le site a fonctionné, mais le compilateur Visual Studio a cassé la plupart des fichiers .cshtml

TLDR;

mysolution.sln avait la mauvaise version

diff sln

vous voulez donc créer une nouvelle solution avec des VS plus récents et la comparer au vôtre et copier les informations de version.

étapes de mise à niveau complètes:

  1. assurez-vous que le fichier .sln a la version correcte pour VS
  2. clic droit MySolution dans VS> Nuget Manager> Mises à jour> exécuter toutes les mises à jour
  3. clic droit MySolution dans VS> Application> mettre à jour Target Framework (4.5.2 dans mon cas)
  4. résoudre tous les problèmes de version dans les fichiers .config (c'est-à-dire RAZOR à 3.0.0.0)
  5. résoudre tous les problèmes de code dans le compilateur (pour moi, ForEach était ambigu)
Sonic Soul
la source
Mon projet a commencé dans VS2013, quand j'ai frappé VS2017, j'ai commencé à voir ces erreurs, mais tout s'est bien compilé, alors j'ai essayé de comprendre ce qui se passait mais pas trop. Cela devenait un problème car l'ouverture d'une vue créait un grand nombre d'erreurs. Je suis maintenant sur VS2019 et je suis tombé sur votre solution; tu gères! Mon .sln avait 14.0.25123.0 et devait être 16.3.9. J'ai également corrigé tous les problèmes de version avec le framework. Je n'ai pas eu à mettre à jour les packages nuget (heureusement) car je n'ai pas le temps de tester complètement toutes les mises à jour.
DaBlue
1

J'ai perdu bien plus d'une journée de travail à ce sujet. J'ai tout essayé dans cet article (et dans d'autres), en vain. Finalement, j'ai trouvé que j'avais besoin d'ouvrir le projet d'une manière différente. Je viens de mettre à niveau un site Web existant vers Visual Studio 2015, MVC5, .NET Framework 4.5.2 et j'utilise Windows 10, mais je suppose que la réponse aurait été la même pour les autres versions de chaque application logicielle.

Voici donc l'option de menu que j'ai choisie pour ouvrir un site Web:

entrez la description de l'image ici

Au lieu de cela, j'ai ouvert le fichier csproj définissant le projet à l'aide de cette option de menu:

entrez la description de l'image ici

J'ai alors eu l'option «solution propre» à laquelle beaucoup d'autres personnes se réfèrent:

entrez la description de l'image ici

Cependant, je n'avais même pas besoin de cela - tout fonctionnait! Eh bien, je suis passé à la prochaine série de problèmes, de toute façon ...

Andy Brown
la source
1

J'avais ajouté le contrôleur par

  • Étape 1: Ajouter> Classe
  • Étape 2: UserController
  • .
  • .
  • .

code correspondant créé:

namespace SampleApp.Controllers
{
    public class UserController {
    }
}

Mes erreurs ont été modifiées en modifiant l'étape 1 comme suit:

  • Étape 1: Ajouter> Contrôleur
  • Étape 2: contrôleur utilisateur
  • .
  • .
  • .

code correspondant créé:

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

Le problème était: je n'avais pas hérité de ma classe de Controller

D'autres messages dans mon erreur inclus - qui provenaient tous de ce problème:

erreur CS0117: 'ModelState' ne contient pas de définition pour 'IsValid'

erreur CS0103: le nom 'RedirectToAction' n'existe pas dans le contexte actuel

erreur CS0103: le nom 'View' n'existe pas dans le contexte actuel

erreur CS0103: le nom 'ViewBag' n'existe pas dans le contexte actuel

erreur CS0103: le nom 'Json' n'existe pas dans le contexte actuel

J'espère que ce changement aidera ceux qui n'ont pas prêté attention dans leurs premières étapes.

Ganesh Kamath - 'Code Frenzy'
la source
1

Après avoir essayé au moins 90% de chaque solution / astuce de ce sujet (et d'autres), je l'ai enfin résolu !! Alerte spoiler, il n'y a aucune trace de logique, c'est la soi-disant "solution" suivante: Lancer la solution avec tous les onglets fermés a finalement fonctionné, alors que rien d'autre ne m'aurait épargné le "ViewBag & Co n'existe pas dans le contexte actuel" ... Vous avez été prévenu, pas de logique flippante!

J'espère que ça aidera quelqu'un un jour ^^

Jueverhard
la source
1

Dans mon cas, j'ai eu ce problème sur mon PC uniquement pour un projet. Mon projet a bien fonctionné dans VS2012 mais lorsqu'il a été ouvert dans VS2017, il avait ce problème.

Le principal problème pour moi ici était le cache. Mon projet pointait vers les anciennes versions en cache de dll pour Razor et MVC et il ne trouvait pas les fonctionnalités ajoutées dans les versions plus récentes, telles que ViewBag. ViewBag a été ajouté dans la version 3 de Razor, mais comme j'avais la version 2 de Razor en cache, il n'a pas pu trouver ViewBag (mais il pouvait trouver d'autres éléments qui étaient présents dans la version 2). Cependant, le simple fait de vider le cache comme dans la réponse acceptée n'a pas résolu mon problème. Nous avons dû changer les fichiers de configuration pour dire "utiliser la version 3 au lieu de 2" pour Razor et "utiliser la version 5 au lieu de 4" pour MVC, puis fermer VS, supprimer le cache, ouvrir le projet et reconstruire. Puis les choses se sont arrangées. Vous trouverez ci-dessous des instructions plus détaillées.

Voici la séquence des changements qui m'ont aidé à résoudre mon problème:

  1. Dans Web.config du dossier «Views», modifiez tous les emplacements où
    • La version MVC est définie sur 4.0.0.0 à 5.0.0.0
    • La version de Razor est définie sur 2.0.0.0 à 3.0.0.0

Voici ces lignes dans mon cas:

<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>

(notes: 1) vos versions peuvent être différentes, je dis juste ce qu'il fallait faire dans mon cas 2) J'ai omis des trucs avec "..." par souci de brièveté 3) même si vous avez une version MVC quelque chose comme 5.3.2.0 vous devez toujours saisir 5.0.0.0, même chose avec la version de Razor - saisissez tous les zéros dans 3.0.0.0)

  1. Dans le fichier de configuration principal (celui du niveau supérieur), webPages:versionpassez de 2.0.0.0 à 3.0.0.0.

  2. Ce changement n'a probablement pas affecté la solution, mais je le mentionnerai quand même. Assurez-vous que la <namespaces>section du dossier «Views» a exactement le même contenu que le fichier principal .conifg à la racine du projet, quelque chose comme:

<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. Enfin, fermez VS. Supprimez tous les fichiers de cache dans %LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache(ou quel que soit votre chemin correct), comme il est suggéré dans la réponse (actuellement) acceptée par Fenton. Supprimez également le .scanfichier, même s'il n'est pas mentionné dans cette réponse. Une fois que vous avez terminé, ouvrez VS, nettoyez votre projet et reconstruisez-le. Les choses devraient fonctionner maintenant. Cela a fonctionné pour moi.
peu importe
la source
0

L'activer et le rallumer a fonctionné pour moi. Vous pouvez essayer de redémarrer Visual Studio.

kravits88
la source
Cela ressemble à une blague, mais c'est ce qui a résolu les choses pour moi. shrug
Douglas Timms
0

J'ai pu résoudre le problème en ajoutant ce qui suit en haut de ma page .cshtml

@{ViewBag.Title = "Title";}

Après la recompilation, j'ai pu supprimer cette ligne et l'erreur a disparu.

Colin
la source
0

J'ai rencontré un problème similaire avec l'un de mes points de vue. Dans mon cas, je viens de nettoyer la solution et j'ai essayé de la reconstruire et de ses travaux.

SATYA PRAKASH NANDY
la source
0

J'ai fait face au même problème. J'ai essayé la solution Clean, Build and Rebuild, mais cela n'a pas fonctionné pour moi.

Alors j'ai enfin fait comme ci-dessous:

  1. Appuyez sur la touche Windows + R
  2. Tapez % temp%
  3. Appuyez sur Entrée
  4. Supprimez tous les fichiers (si quelques fichiers ne sont pas supprimés, aucun problème)

J'espère que cela fonctionne pour vous aussi.

Sadiq
la source
0

Après la mise à niveau d'une des applications de mon client d'ASP MVC 4 vers ASP MVC 5, nous avons eu des erreurs de concepteurs liées aux Helpers Html et ViewBag dans les pages cshtml.

Pour résoudre ces problèmes, assurez-vous de procéder comme suit: Installez la bibliothèque Asp.NET Web Helpers à partir de Nuget Ouvrez le Web.config du projet et mettez à jour les liaisons si elles n'ont pas été mises à jour lors de l'installation des packages Nuget, par exemple

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

Recherchez «pages Web: Version» dans les paramètres de l'application et mettez-le à jour vers la version 3.0.0.0. Mon web.config avait

et je l'ai mis à jour pour

Redémarrez Visual Studio et reconstruisez. Vous devrez peut-être supprimer le dossier bin de votre projet

Visitez ceci: https://lajak.wordpress.com/2014/11/16/asp-mvc-5-viewbag-does-not-exist-in-the-current-context/

Raniel Garcia
la source
-1

Après avoir tout essayé et me sentir un peu frustré, j'ai mis à niveau le framework .NET sur mon application MVC5 de 4.5 à 4.5.2. D'une manière ou d'une autre, cela a résolu mon problème. J'espère que ça aide.

user3520884
la source
-4

J'ai résolu le remplacement dans web.config

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

avec

 <add key="webpages:Enabled" value="true" />
Fabio Manneschi
la source
Juste pour ajouter à la raison pour laquelle cela a été voté contre - cela permet à la vue réelle d'être visible depuis un navigateur, je crois
mtbennett