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?

82
demandé sur Cœur 2011-02-10 19:56:00

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.

37
répondu marcind 2017-05-23 11:47:25

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.

70
répondu crimbo 2017-10-26 19:43:34

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

18
répondu Ruwan Jayalath 2013-03-18 04:06:03

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>
7
répondu Jon Crowell 2015-08-31 14:56:23

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

5
répondu Wilson Vallecilla 2016-02-11 19:25:09

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 !

3
répondu JJP 2013-12-18 08:59:17

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

2
répondu Hernaldo Gonzalez 2015-01-26 17:38:56

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.

2
répondu Kcoder 2015-02-24 20:05:07

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

1
répondu csharpsql 2015-12-11 10:09:42

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"/>
1
répondu Robin Leblond 2016-03-21 20:31:36

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.

1
répondu Champ 2016-07-19 18:47:43

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.

Project Output Path

VS recherche des dlls dans le dossier bin

1
répondu Naga Sailesh 2016-10-27 08:59:58

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=\&quot;Web\&quot; /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)

1
répondu Dave 2017-11-08 07:59:48

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

0
répondu user1412699 2016-09-06 10:00:25