web-dev-qa-db-fra.com

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

J'essaie d'utiliser ViewBag dans mon application. J'ai toutes les dernières DLL, 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 pas de changement. 

En outre, je ne crois pas que les dll apparaissent dans le GAC. 

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

84
efleming

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

Utilisez l'outil de mise à niveau MVC 3 pour vous assurer automatiquement que vous disposez des bonnes valeurs de configuration.

38
marcind

J'avais le même problème. En fin de compte, il me manquait le fichier ./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, un fichier Vanilla ./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>

L'ajout d'un fichier ./Views/Web.config contenant ce contenu a résolu ce problème pour moi.

74
crimbo

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

19
Ruwan Jayalath

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

Dans le fichier web.config du dossier Views (pas le répertoire web.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>
7
Jon Crowell

Après avoir essayé différentes choses, il s’avère que c’est le cache VS. Vous pouvez le résoudre en supprimant les fichiers de cache situés dans:

C:\Utilisateurs\votre.nom.ici\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.

6
Wilson Vallecilla

J'ai eu le même problème et Crimbo m'a donné le bon indice, cela a été causé par le fichier ./Views/Web.config qui était présent mais ne contenant pas les bons espaces de noms, je suppose ...

J'ai créé un projet MVC5 vierge et importé son ./Views/Web.config dans mon projet existant et les ondes rouges sous chaque utilisation de ViewBag ont disparu!

3
JJP

Si vous utilisez Visual Studio 2013 et aimez MVC 3, vous obtenez cette erreur car Visual Studio 2013 ne prend pas MVC 3 en mode natif (même si vous modifiez ./Views/web.config), seul MVC 4: https://msdn.Microsoft.com/en-us/library/hh266747.aspx

2
Hernaldo Gonzalez

J'avais un fichier ./Views/Web.Config mais cette erreur s'est produite après la publication du site. Il s'avère que la propriété d'action de génération sur le fichier a été définie sur None au lieu de Content. Changer ceci en Content a permis à la publication de fonctionner correctement.

2
Kcoder

Si vous aviez essayé toutes les réponses disponibles et que vous ne trouviez toujours pas la réponse, cela pourrait résoudre le problème . Si vous avez différentes configurations de solutions telles que Debug, Release etc , Définissez le chemin de sortie du projet sur 'bin' et compilez le projet. Annule le changement après la compilation.

 Project Output Path

VS cherche des dll dans le dossier bin

1
Naga Sailesh

J'avais déjà essayé de supprimer le fichier bin et obj et de 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. Cela est souvent dû au fait que le fichier web.config n'a pas la version correcte de l'une des références. Cela signifie que vous devez cliquer sur la référence dans Visual Studio pour voir la version dans l'onglet de propriété, puis la faire correspondre à la version dans les fichiers web.config.

Une autre méthode consiste (si possible) à mettre à niveau vers une version ultérieure du framework .net, puis à supprimer les fichiers bin/obj et à redémarrer Visual Studio. Je ne peux que supposer que cela 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 qu'il montre sont celles que j'ai affichées

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

Dans le fichier Web.Config (pas celui de View)

<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 fichier web.config) mais je l'ai supprimé 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=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

Enfin, dans la console du gestionnaire de packages, ajoutez update-package

Lancer le site localement et voir les erreurs de compilation qui ont été corrigées par mon deuxième paragraphe (correspondant aux versions des références)

1
Dave

J'ai eu ce problème après avoir modifié l'espace de nom par défaut de l'application dans la boîte de dialogue Propriétés.

Le ./Views/Web.Config contenait une référence à l'ancien espace de noms

1
csharpsql

Dans mon cas, le fait de modifier la page Web: Version sur la valeur appropriée a résolu mon problème. Pour moi, la valeur correcte était (2.0.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"/>
1
Robin Leblond

Après avoir essayé toutes les approches, aucune d’entre elles n’a fonctionné pour moi car toutes mes configurations étaient correctes. enfin

La suppression de tous les fichiers de "temp" et "% temp%" du système a permis de résoudre ce problème.

Ouvrez la commande Exécuter (Windows + R), tapez les chaînes ci-dessus et supprimez tous les fichiers temporaires.

1
Champ

Comme @ Wilson Vallecilla déjà mentionné. Veuillez suivre les étapes ci-dessous pour supprimer le cache:

Veuillez suivre le chemin ci-dessous pour découvrir les fichiers:

C:\Users\your.name.here\AppData\Local\Microsoft\VisualStudio\14.0\ComponentModelCache

Supprimer les quatre fichiers:

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

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

La suppression de vos fichiers temporaires ASP.NET est également utile. C:\Utilisateurs\votre.nom.ici\AppData\Local\Temp\Fichiers ASP.NET temporaires.

Cela fonctionne pour moi.

Merci!

0
Developer

J'ai mis à jour des pages Web: Version sous dans le dossier ./Views/Web.Config mais ce paramètre était également présent dans web.config à la racine. Mettre à jour les deux ou supprimer de la racine web.config 

0
user1412699