Le nom "ViewBag" n'existe pas dans le contexte actuel
j'essaie D'utiliser ViewBag dans mon application, j'ai tous les DLLs récents, la dernière version de MVC 3, mais je reçois toujours l'erreur:
"Le nom de "ViewBag" n'existe pas dans le contexte actuel"
j'ai même désinstallé puis réinstallé MVC 3 et pourtant il n'y a pas de changement.
en outre, Je ne crois pas que les dll apparaissent dans le GAC.
Quel est mon problème? Ou comment ajouter les dll au GAC?
14 réponses
vous devez ajouter la configuration de rasoir spécifique MVC à votre web.config. Voir ici: Rasoir HtmlHelper Extensions (ou d'autres espaces de noms pour les vues) n'est Pas Trouvé
utilisez l'outil de mise à niveau MVC 3 pour vous assurer automatiquement que vous avez les bonnes valeurs de configuration.
j'avais le même problème. Il s'est avéré que je manquais le fichier ./Views/Web.config
, parce que j'ai créé le projet à partir d'un vide ASP.NET application au lieu d'utiliser un ASP.NET modèle MVC.
pour ASP.NET MVC 5, un fichier ./Views/Web.config
contient ce qui suit:
<?xml version="1.0"?>
<!-- https://stackoverflow.com/a/19899269/178082 -->
<configuration>
<configSections>
<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">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.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>
<appSettings>
<add key="webpages:Enabled" value="false" />
</appSettings>
<system.web>
<httpHandlers>
<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
<!--
Enabling request validation in view pages would cause validation to occur
after the input has already been processed by the controller. By default
MVC performs request validation before a controller processes the input.
To change this behavior apply the ValidateInputAttribute to a
controller or action.
-->
<pages
validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<controls>
<add assembly="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
</controls>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
</configuration>
Ajouter un fichier ./Views/Web.config
contenant ce contenu a corrigé ce problème pour moi.
essayez de nettoyer et reconstruire. Cela a fonctionné dans mon cas.
j'ai eu le même problème dans une solution qui avait été mis à jour en MVC 5 Dans Visual Studio 2015.
sur le web.fichier de configuration dans le dossier Views (pas le Web racine.config), j'ai mis à jour le numéro de version mentionné dans <configSections>
de 2.0.0.0
à 3.0.0.0
.
<configuration>
<configSections>
<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">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
après avoir essayé différentes choses, il s'avère que C'était VS cache. Vous pouvez le résoudre en supprimant les fichiers cache situés dans:
C:\Users\your.name.here\AppData\Local\Microsoft\VisualStudio\14.0\ComponentModelCache
j'ai fermé mon projet, supprimé les fichiers sur ce chemin et rouvert mon projet, nettoyé la solution et construit à nouveau et le problème a été résolu""
Les fichiers seront recréé lors du prochain lancement de Visual Studio
j'ai eu le même problème et crimbo m'a donné le bon indice, il a été causé par le ./ Views / Web.fichier de configuration qui était présent mais ne contenait pas les bons espaces de noms je suppose...
j'ai créé un projet vierge MVC5 et importé its ./ Views / Web.config dans mon projet existant et les ondes rouges sous chaque utilisation de ViewBag ont disparu !
si vous utilisez Visual Studio 2013 et que vous aimez utiliser MVC 3, vous obtenez cette erreur parce que Visual Studio 2013 ne supporte pas MVC 3 nativement (même si vous changez ./Vues/web.config), seulement MVC 4: https://msdn.microsoft.com/en-us/library/hh266747.aspx
j'avais un fichier ./Views/Web.Config
mais cette erreur est survenue après la publication du site. Il s'avère que la propriété build action sur le fichier a été définie à None
au lieu de Content
. Le fait de changer cela en Content
a permis à la publication de fonctionner correctement.
j'ai eu ce problème après avoir changé le namespace par défaut de L'Application dans la boîte de dialogue Propriétés.
The ./ Views / Web.Config contenait une référence à l'ancien namespace
dans mon cas, changer la page Web: Version à la bonne valeur a résolu mon problème, pour moi la bonne valeur était (2.0.0 au lieu de 3.0.0.0) :
<appSettings>
<add key="webpages:Version" value="2.0.0.0"/>
<add key="webpages:Enabled" value="false"/>
après avoir essayé toutes les approches, aucune d'elles n'a fonctionné pour moi puisque tout ce que j'ai était des configurations correctes. enfin
supprimer tous les fichiers de "temp" et "%temp% " du système a aidé à résoudre ce problème.
Open Run command(Windows+R) et tapez les chaînes de caractères ci-dessus et supprimez tous les fichiers temporaires.
si vous aviez essayé toutes les réponses disponibles et ne pouvez toujours pas trouver la réponse, cela pourrait résoudre le problème. Si vous avez différentes configurations de solutions comme Debug, Release, etc. ensuite, définissez le chemin de sortie du projet à ' bin ' et compilez le projet. Revenir sur la modification après compilation.
VS recherche des dlls dans le dossier bin
j'avais déjà essayé de supprimer le fichier bin et obj et redémarrer VS et je n'ai pas eu de chance.
j'ai également eu ce problème plusieurs fois et c'est une douleur à résoudre à chaque fois. Souvent, c'est en raison de la web.fichier de configuration n'ayant pas la bonne version d'une des références. Cela signifie cliquez sur la référence dans Visual Studio pour voir la version dans l'onglet propriétés, puis le faire correspondre à la version du site web.les fichiers de configuration.
une autre voie est (si possible) mise à niveau vers une version ultérieure du framework .net, puis suppression des fichiers bin/obj et redémarrage de Visual Studio. Je ne peux que supposer que ça change quelque chose dans le
une vérification rapide de la différence entre le fichier csproj ne montre pas réellement de différence majeure... Mais les différences, il n'spectacle était (j'ai ajouté (supprimer) pour montrer l'ancienne ligne)
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> (remove)
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>(remove)
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
sur le Web.Fichier de configuration (pas celui en vue)
<add key="webpages:Version" value="2.0.0.0" /> (remove)
<add key="webpages:Version" value="3.0.0.0"/>
il a également ajouté (au même web.fichier de configuration) mais je l'ai enlevé manuellement
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"/>
</compilers>
</system.codedom>
enfin, dans la console du Gestionnaire de paquets, ajouter update-package
lancer le site Web localement et voir toutes les erreurs de compilation qui a été corrigé par mon deuxième paragraphe (correspondant aux versions des références)
j'ai mis à jour les pages web:la Version sous ./ Views / Web.Dossier de configuration mais ce paramètre était également présent dans web.config à la racine. Mettre à jour ou de supprimer à partir de la racine web.config