Der Name 'ViewBag' existiert im aktuellen Kontext nicht

89

Ich versuche, ViewBag in meiner Anwendung zu verwenden. Ich habe alle aktuellen DLLs, die neueste Version von MVC 3, aber dennoch wird der Fehler angezeigt:

"Der Name 'ViewBag' existiert im aktuellen Kontext nicht."

Ich habe MVC 3 sogar deinstalliert und dann neu installiert, und dennoch gibt es keine Änderung.

Ich glaube auch nicht, dass die DLLs im GAC angezeigt werden.

Was könnte mein Problem sein? Oder wie man die DLLs zum GAC hinzufügt?

efleming
quelle
1
Beachten Sie, dass für 5.2.2.0 die Datei web.config auf 5.2.2.0 verweisen sollte, die Ansicht / web.config jedoch für die MVC-Assembly auf 5.1.0.0
Bart Calixto,

Antworten:

39

Sie müssen die MVC-spezifische Razor-Konfiguration zu Ihrer web.config hinzufügen. Siehe hier: Razor HtmlHelper-Erweiterungen (oder andere Namespaces für Ansichten) Nicht gefunden

Verwenden Sie das MVC 3-Upgrade-Tool, um automatisch sicherzustellen, dass Sie die richtigen Konfigurationswerte haben.

Marcind
quelle
Vielen Dank! Dieser Link hat geholfen! Ich denke, dies ist alles das Ergebnis einer Website, die sich in der MVC 3 Beta befand. Wenn Sie dann die neueste Version erhalten, werden die Webkonfigurationen nicht geändert. Vielen Dank!
efleming
Ich habe meinen Beitrag mit diesem sowie einem verwandten Fix aktualisiert: stevesmithblog.com/blog/…
ssmith
Sie können das Upgrade-Tool verwenden (siehe aktualisierte Antwort), um sicherzustellen, dass Ihre Konfiguration korrekt ist.
Marcind
3
Nur eine Anmerkung: Wenn Sie zusätzliche Ansichtspositionen haben, dh außerhalb der normalen ~/ViewsPosition, kopieren Sie diese ebenfalls ~/Views/Web.configan diese Position.
Dave Thieben
83

Ich hatte das gleiche Problem. Es stellte sich heraus, dass mir das fehlte./Views/Web.config Datei , da ich das Projekt aus einer leeren ASP.NET-Anwendung erstellt habe, anstatt eine ASP.NET MVC-Vorlage zu verwenden.

Für ASP.NET MVC 5 ./Views/Web.configenthält eine Vanilla- Datei Folgendes:

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

Das Hinzufügen einer ./Views/Web.configDatei mit diesem Inhalt hat dieses Problem für mich behoben.

Crimbo
quelle
3
Endlich Lösung. Ich habe die Datei /Views/Web.config nicht auf dem Server bereitgestellt, und diese fehlende Datei war die Ursache des Fehlers.
Stack Man
2
kam zurück und benutzte diese Lösung ein zweites Mal! :)
user230910
2
Nachdem ich über einen Tag damit verbracht hatte, es herauszufinden, tat dies für mich. Vielen Dank. Das einzige, was ich dem <namespaces> -Tag in "./Views/Web.config" hinzufügen musste, war: <add namespace="System.Web.Optimization"/>
dunwan
In meinem Fall befanden sich die Elemente aus irgendeinem Grund nicht in der Root-Datei web.config, sondern wurden bei der Erstellung eines MVC5-Layouts unter 'Ansichten' zu einer web.config hinzugefügt. Ich habe die Elemente in die root web.config migriert und die 'extra' (??) web.config
JDPeckham
2
Alter, Gott segne dich dafür. Das hat mich EXTREM geärgert.
Dragan B.
19

Versuchen Sie zu reinigen und wieder aufzubauen. In meinem Fall hat es funktioniert.

Ruwan Jayalath
quelle
Ich kann nicht glauben, dass ich meine Zeit damit verschwendet habe, mich zu fragen, was mit meinem Code nicht stimmt ... danke, dass es funktioniert hat
Mr_Hmp
ärgerlich, dass dies funktioniert ... ich vergesse immer, dies zu tun und verschwende so viel Zeit ... sollte nicht notwendig sein
TCC
In meinem Fall musste ich den
Paketordner
9

Ich hatte das gleiche Problem bei einer Lösung, die in Visual Studio 2015 auf MVC 5 aktualisiert wurde.

In der Datei web.config im Ordner Sichten (nicht die Wurzel web.config), aktualisiere ich die Versionsnummer im Sinne der <configSections>von 2.0.0.0zu 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>
Jon Crowell
quelle
2
Vielen Dank! Diese Version Zeug ist verrückt. Jedes Mal, wenn ich mich umdrehe, sind MS-Upgrades übereinander. Ling to SQL wird durch Entity Framework ersetzt, MVC ist von 1 auf 6 gestiegen.
JustJohn
Danke, mein Problem mit VS2017 wurde behoben.
QuickNull
Behoben VS 2019 MVC 5 App.
MrDywar
6

Nachdem Sie verschiedene Dinge ausprobiert haben, stellt sich heraus, dass es sich um einen VS-Cache handelt. Sie können das Problem beheben, indem Sie die Cache-Dateien löschen in:

C: \ Benutzer \ Ihr.Name.hier \ AppData \ Local \ Microsoft \ VisualStudio \ 14.0 \ ComponentModelCache

Ich habe mein Projekt geschlossen, die Dateien auf diesem Pfad gelöscht und mein Projekt erneut geöffnet, die Lösung bereinigt und erneut erstellt, und das Problem wurde behoben

Die Dateien werden beim nächsten Start von Visual Studio neu erstellt

Wilson Vallecilla
quelle
Dies funktionierte auch für mich in Version 15 (VS 2017). Ich hätte wahrscheinlich nie daran gedacht ... danke für die große Zeitersparnis, Wilson & Silver!
Paul Schroeder
Universeller Pfad%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache
Fiat
3

Ich hatte das gleiche Problem und Crimbo gab mir den richtigen Hinweis. Es wurde durch die Datei ./Views/Web.config verursacht, die vorhanden war, aber nicht die richtigen Namespaces enthielt, denke ich ...

Ich habe ein leeres MVC5-Projekt erstellt und dessen ./Views/Web.config in mein vorhandenes Projekt importiert. Die roten Wellen bei jeder Verwendung von ViewBag sind verschwunden!

JJP
quelle
Visual Studio 2013 hat ein leeres Webprojekt mit aktiviertem MVC-Kontrollkästchen erstellt. Es erstellt die gesamte Dateistruktur mit minimalen MVC-Namespace-Referenzen. Ich habe einen einfachen Controller und eine Ansicht hinzugefügt. Ich habe Kompilierungsfehler erhalten "Der Typ- oder Namespace-Name 'Ajax' ist im Namespace 'System.Web.Mvc' nicht vorhanden (fehlt Ihnen eine Assembly-Referenz)". Der Datei-Editor zeigt auch die Warnung "Der Name 'ViewBag' existiert im aktuellen Kontext nicht". Gehen Sie zu Projektreferenzen, suchen Sie System.Web.Mvc und setzen Sie die lokale Kopie auf true. Reinigen Sie den Build und bauen Sie ihn neu auf, er hat mein Problem gelöst.
Kagan Agun
2

Ich hatte eine ./Views/Web.ConfigDatei, aber dieser Fehler trat nach dem Veröffentlichen der Site auf. Es stellt sich heraus, dass die Build-Aktionseigenschaft für die Datei auf Noneanstelle von festgelegt wurde Content. Wenn Sie dies so ändern, Contentdass das Veröffentlichen ordnungsgemäß funktioniert.

Kcoder
quelle
1

Ich hatte dieses Problem, nachdem ich den Standard-Namespace der Anwendung im Dialogfeld "Eigenschaften" geändert hatte.

Die ./Views/Web.Config enthielt einen Verweis auf den alten Namespace

csharpsql
quelle
Ja, und es wird eine Fehlermeldung an der völlig falschen Stelle ausgegeben. Es lohnt sich zu überprüfen, ob alle Namespaces vorhanden sind, auf die in ALLEN web.config-Dateien verwiesen wird. Ich hatte einen alten Namespace in der Web- / Konfigurationsdatei des Bereichs, der viele Probleme verursachte
user230910
1

In meinem Fall hat das Ändern der Webseite: Version auf den richtigen Wert mein Problem behoben. Für mich war der richtige Wert (2.0.0.0 anstelle von 3.0.0.0):

<appSettings>
        <add key="webpages:Version" value="2.0.0.0"/>
        <add key="webpages:Enabled" value="false"/>
Robin Leblond
quelle
1

Nachdem ich alle Ansätze ausprobiert hatte, funktionierte keiner für mich, da ich nur korrekte Konfigurationen hatte. endlich

Das Löschen aller Dateien aus "temp" und "% temp%" aus dem System trug zur Behebung dieses Problems bei.

Öffnen Sie den Befehl Ausführen (Windows + R), geben Sie die obigen Zeichenfolgen ein und löschen Sie alle temporären Dateien.

Champ
quelle
Danke dir! Nachdem ich alles versucht hatte, funktionierte das für mich.
user390480
1

Wenn Sie alle verfügbaren Antworten ausprobiert haben und die Antwort immer noch nicht finden können, kann dies das Problem lösen. Wenn Sie unterschiedliche Lösungskonfigurationen wie Debug, Release usw. haben, setzen Sie den Projektausgabepfad auf 'bin' und kompilieren Sie das Projekt. Änderung nach dem Kompilieren rückgängig machen.

Projektausgabepfad

VS sucht nach DLLs im Ordner bin

Naga Sailesh
quelle
1

Ich hatte bereits versucht, die bin- und obj-Datei zu löschen und VS neu zu starten, und hatte kein Glück.

Ich hatte dieses Problem auch oft und es ist jedes Mal ein Schmerz, es zu lösen. Oft liegt es daran, dass die Datei web.config nicht die richtige Version einer der Referenzen enthält. Dies bedeutet, dass Sie in Visual Studio auf die Referenz klicken, um die Version auf der Registerkarte "Eigenschaften" anzuzeigen, und sie dann mit der Version in den Dateien "web.config" abgleichen.

Eine andere Möglichkeit besteht darin, (wenn möglich) auf eine spätere Version des .net-Frameworks zu aktualisieren, dann bin / obj-Dateien zu löschen und Visual Studio neu zu starten. Ich kann nur annehmen, dass es etwas in der ändert

Eine schnelle Überprüfung des Unterschieds zwischen der csproj-Datei zeigt eigentlich keinen wesentlichen Unterschied ... Aber die Unterschiede, die es zeigte, waren (ich habe hinzugefügt (entfernen), um die alte Zeile anzuzeigen)

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

In der Datei Web.Config (nicht in der Ansicht)

<add key="webpages:Version" value="2.0.0.0" /> (remove)
<add key="webpages:Version" value="3.0.0.0"/>

Es wurde auch hinzugefügt (zur gleichen web.config-Datei), aber ich habe es manuell entfernt

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

Fügen Sie schließlich in der Package Manager-Konsole hinzu update-package

Führen Sie die Website lokal aus und sehen Sie alle Kompilierungsfehler, die durch meinen zweiten Absatz behoben wurden (passend zu den Versionen der Referenzen).

Dave
quelle
0

Ich habe Webseiten aktualisiert: Version unter im Ordner ./Views/Web.Config, aber diese Einstellung war auch in web.config im Stammverzeichnis vorhanden. Aktualisieren Sie beide oder entfernen Sie sie aus dem Stammverzeichnis web.config

user1412699
quelle
0

Wie @ Wilson Vallecilla bereits erwähnt. Führen Sie die folgenden Schritte aus, um den Cache zu löschen:

Bitte folgen Sie dem folgenden Pfad, um die Dateien zu entdecken:

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

Löschen Sie alle vier Dateien:

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

Ich habe mein Projekt geschlossen, die Dateien auf diesem Pfad gelöscht und mein Projekt erneut geöffnet, die Lösung bereinigt und erneut erstellt, und das Problem wurde behoben

Das Löschen Ihrer temporären ASP.NET-Dateien hilft ebenfalls. C: \ Benutzer \ Ihr.Name.hier \ AppData \ Local \ Temp \ Temporäre ASP.NET-Dateien.

Das funktioniert bei mir.

Vielen Dank!

Trilok Pathak
quelle
0

Für MVC5, falls Sie eine Anwendung von Grund auf neu erstellen. Sie müssen dem Ordner "Ansichten" eine Datei "web.config" hinzufügen und den folgenden Code einfügen.

<?xml version="1.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>

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

Beachten Sie, dass Sie für MVC 3 die Version auf 3.0.0.0 unter ändern müssen

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

Möglicherweise müssen Sie die Seite * .cshtml schließen und erneut öffnen, um die Änderungen anzuzeigen.

Ashish Kaul
quelle