92 votes

Le nom 'ViewBag' n'existe pas dans le contexte actuel.

J'essaie d'utiliser ViewBag dans mon application, j'ai toutes les dlls récentes, la dernière version de MVC 3, mais je reçois toujours l'erreur :

"Le nom '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 aucun changement.

De plus, je ne pense pas que les fichiers DLL apparaissent dans le GAC.

Quel pourrait être mon problème ? Ou comment ajouter les dll au GAC ?

1 votes

Gardez à l'esprit que, pour la version 5.2.2.0, le web.config doit pointer vers la version 5.2.2.0, mais que le Views/web.config doit pointer vers la version 5.1.0.0 pour l'assemblage MVC.

85voto

crimbo Points 572

J'avais le même problème. Il s'est avéré qu'il me manquait le ./Views/Web.config car j'ai créé le projet à partir d'une application ASP.NET vide au lieu d'utiliser un modèle ASP.NET MVC.

Pour ASP.NET MVC 5, une version classique de l'application ./Views/Web.config contient les éléments suivants :

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

Ajout d'un ./Views/Web.config contenant ce contenu a réglé ce problème pour moi.

3 votes

Enfin une solution. Je n'ai pas déployé le fichier /Views/Web.config sur le serveur et ce fichier manquant était la cause de l'erreur.

2 votes

Est revenu et a utilisé cette solution une 2ème fois ! :)

2 votes

Après avoir perdu plus d'une journée à essayer de comprendre, ça a marché pour moi. Merci. La seule chose que j'ai dû ajouter à la balise <namespaces> dans " ./Views/Web.config était ; <add namespace="System.Web.Optimization"/>

39voto

marcind Points 38002

Vous devez ajouter la configuration Razor spécifique à MVC à votre web.config. Voir ici : Extensions Razor HtmlHelper (ou autres espaces de noms pour les vues) non trouvées

Utilisez le Outil de mise à niveau de MVC 3 pour s'assurer automatiquement que vous avez les bonnes valeurs de configuration.

0 votes

Merci ! Ce lien m'a aidé ! Je suppose que tout ceci est le résultat de la création d'un site qui était sur la version bêta de MVC 3, et puis quand vous obtenez la dernière version, les configurations web ne sont pas modifiées. Merci !

0 votes

J'ai mis à jour mon message avec cette correction ainsi qu'une correction connexe : stevesmithblog.com/blog/

0 votes

Vous pouvez utiliser l'outil de mise à niveau (voir la réponse mise à jour) pour vous assurer que votre configuration est correcte.

19voto

Ruwan Jayalath Points 130

Essayez de nettoyer et de reconstruire. Cela a fonctionné dans mon cas.

0 votes

Je n'arrive pas à croire que j'ai perdu mon temps à me demander ce qui n'allait pas dans mon code... Merci, ça a marché.

0 votes

C'est rageant que cela fonctionne ... j'oublie toujours de le faire et je perds tellement de temps ... cela ne devrait pas être nécessaire

0 votes

Dans mon cas, j'ai dû supprimer le dossier des paquets de la solution et faire un nettoyage complet.

9voto

Jon Crowell Points 5656

J'ai eu le même problème dans une solution qui avait été mise à niveau vers MVC 5 dans Visual Studio 2015.

Dans le fichier web.config du dossier Views (et non dans le web.config de la racine), j'ai mis à jour le numéro de version mentionné dans la section <configSections> de 2.0.0.0 a 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>

2 votes

Merci beaucoup ! Ce truc de version est fou. Chaque fois que je me retourne, les mises à jour de MS se succèdent. Ling to SQL est remplacé par Entity Framework, MVC est passé de 1 à 6, et ainsi de suite.

0 votes

Merci, cela a réglé mon problème avec VS2017.

0 votes

Correction de l'application VS 2019 mvc 5.

6voto

Après avoir essayé différentes choses, il s'est avéré que c'était le cache VS. Vous pouvez le résoudre en supprimant les fichiers de 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éés lors du prochain lancement de Visual Studio.

0 votes

Cela a également fonctionné pour moi dans la v15 (VS 2017). Je n'aurais probablement jamais pensé à le faire... merci pour ce gain de temps, Wilson & Silver !

0 votes

Parcours universel %LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCac‌​he

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X