Der Name 'ViewBag' existiert im aktuellen Kontext nicht - Visual Studio 2015


96

Ich beginne wieder mit der Entwicklung in ASP.NET und bin in Visual Studio auf einen kleinen Fehler gestoßen. Meine .cshtml-Dateien zeigen Fehler bei der Verwendung einiger Rasiermesserfunktionen. Zum Beispiel "Der Name 'ViewBag' existiert im aktuellen Kontext nicht". Hier ist ein Bild:

Screenshot des Problems in Visual Studio 2015

Ich benutze ein Demo-Projekt. Sie finden das Projekt hier: https://github.com/Wintellect/Angular-MVC-Cookbook/tree/master/BasicProject

Ich habe mehrere andere Threads durchgesehen und die meisten schlagen vor, die Datei (en) von web.config zu aktualisieren. Diese 2 Konfigurationsdateien sind bereits vorhanden und da es sich um eine ziemlich beliebte Demo handelt, gehe ich davon aus, dass sie alle erforderlichen Konfigurationen enthält. Ich habe diese Konfigurationsdateien natürlich durchgesehen und sie enthalten tatsächlich die vorgeschlagenen Lösungen.

Andere Details:

  • Ich habe Clean & Rebuild bereits für die Lösung verwendet, aber das hat nichts geändert.
  • Wenn ich ein komplett neues MVC-Projekt erstelle, funktioniert es
  • Mein Freund hat das gleiche Problem und wir verwenden beide VS 2015 und Windows 10
  • Ich kann die Anwendung immer noch ausführen und sie funktioniert.

Danke im Voraus.


Wenn es noch läuft, ist es nur ein Fehler im Hintergrund-Compiler. Versuchen Sie, die Datei <Projektname> .suo zu löschen.
Henk Holterman

Welches Projekt führen Sie aus? Basic ? Roh, Routing?
Prashant Ghimire

1
@Henk leider hat das nicht geklappt.
Michjuh

@Prashant Ich habe sowohl das Basisprojekt als auch das Routing-Projekt ausprobiert. Das Problem tritt bei beiden auf.
Michjuh

Hast du es gelöst? Ich hatte das gleiche Problem @Michjuh
Burk

Antworten:


122

Ich hatte dieses Problem trotz der richtigen Konfiguration.

Es stellte sich heraus, dass einige fehlerhafte Dateien im Komponenten-Cache vorhanden waren, sodass die Razor-Ansichten ViewBag, Model und HtmlHelpers nicht erkennen konnten . Das Löschen dieser Dateien löste das Problem (gute Versionen dieser Dateien wurden beim nächsten Öffnen von Visual Studio erstellt).

Die Dateien befinden sich hier:

%LOCALAPPDATA%\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 später das gleiche Problem auf mehreren anderen Entwicklercomputern gesehen und dieses Update löst es schnell.


9
Genial, das hat das Problem für mich behoben. Ich habe auch festgestellt, dass das Löschen Ihrer temporären ASP.NET-Dateien ebenfalls hilfreich ist. C: \ Users \ your.name.here \ AppData \ Local \ Temp \ Temporäre ASP.NET-Dateien
Kevin

Dies war auch für mich das Problem. Danke fürs Schreiben!
Caverman

Dies hat mein Problem behoben, das durch das Upgrade von .net 4 auf 4.5.2 und das Upgrade von mvc 3 auf 5 verursacht wurde
Joe Phillips

Mein Problem war, dass die Eigenschaften meines Modells nicht erkannt wurden. Dieser Fix löste mein Problem sofort.
Jkerak

5
Mein Ordner ist 15.0_7e8de76c \ ComponentModelCache für VS 2017.
Kevin .NET

40

Aktualisieren Sie die Versionsnummern in den Einstellungen der web.configDatei im Ordner Ansichten.

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

Wenn Sie die MVC-Version über Nuget aktualisiert haben, sollte dies sein:

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

Möglicherweise müssen auch andere Abhängigkeitsversionen aktualisiert werden. Kompilierungs- und Namespace-Probleme in Views for MVC-Hilfsprogrammen und -Objekten hängen normalerweise mit fehlerhaften web.configDateien in den View-Ordnern zusammen.


8
Dies funktionierte für mich, obwohl ich eine Versionsnummer von 5.2.0.0 anstelle von 5.2.2.0 eingeben musste. Sie können sehen, welche Version Sie haben, indem Sie auf Referenzen> System.Web.MVC gehen und Eigenschaften auswählen. Vielen Dank für die Hilfe
user2233949

@ user2233949, @Benjamin Ich verwende die MVC-Version 4.0.0.0. Ich konnte sie anhand der Eigenschaften sehen. Was sollte die Lösung in meinem Fall sein?
Zeeshan

Überprüfen Sie alle Ihre web.config-Dateien und stellen Sie sicher, dass alle die richtige Hostversion verwenden. Manchmal, wenn Sie Einstellungen in Übersichtsordnern überschrieben haben, kann das Problem vorbeigehen, ohne behoben zu werden.
Benjamin Anderson

1
Ich habe alle anderen Vorschläge ausprobiert, aber dieser hat bei mir mit 5.2.3.0 funktioniert. Vielen Dank Benjamin
Mitch

1
Das war die richtige Antwort für mich. Vergessen Sie auch nach dem Ändern der Datei web.config nicht, alle Dateien und Dateien zu schließen und die Lösung zu bereinigen *.cshtmlund neu zu *.vbhtmlerstellen. VS 2019 16.1.2
Štěpán Havránek

22

Suchen Sie in den App-Einstellungen nach "Webseiten: Version" und aktualisieren Sie sie auf Version 3.0.0.0. Meine web.config hatte

<add key="webpages:Version" value="2.0.0.0" />

und ich habe es aktualisiert

<add key=”webpages:Version value=”3.0.0.0 />

1
Ich habe beide Zeilen entfernt (Webseiten.Version, Webseiten.Enabled) und scheint in MVC 5.2
Grappachu

Dies sollte in beiden Versionen von Web.config, Project Root und den Web.configs aller Bereiche ebenfalls aktualisiert werden.
Sonu K

Danke dir. In meinem Fall befinden sich die problematischen Tags unter <configuration> - <configSections> - <sectionGroup name = "system.web.webPages.razor"> Ich muss <sectionGroup name = "system.web.webPages.razor"> ändern. <section name = "host"> und <section name = "pages"> zur Verwendung von Version = 3.0.0.0
Hong

Das Entfernen des Caches an einer beliebigen Stelle (einschließlich Temporary ASP.NET Files) hat nicht geholfen, aber diese Antwort hat geholfen .
immer,

Was bedeutet diese Einstellung auch bedeuten ? Was entspricht es? Wie bestimmen Sie, von welcher Version Sie in Ihrer App abhängig sind?
jpmc26

17

Ich habe versehentlich web.configaus dem ViewsOrdner entfernt und dachte, dass es unnötig war. Als ich es zurücklegte, fing es an zu funktionieren.


12

Alles unter der Sonne, stellt sich heraus , nachdem er versucht etwas geändert hatte meine System.Web.WebPages.Razor <sectionGroup>in /Views/Web.Configder richtigen Camelcase System.Web.WebPages.Razorzu einem All-Klein system.web.webpages.razordie letztlich mein Tod war.

In der Hoffnung, dass dies einer anderen armen Seele bei diesem Problem helfen kann ...

Als Referenz ist dies der richtige Eintrag (für mein Szenario)

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

3
Meins war alles in Kleinbuchstaben, löste aber mein Problem nicht.
Paul Totzke

Heiliger Karpfen. Dies war auch mein Tod. Ich kann nicht glauben, dass du das entdeckt hast, @jbwedtech.
Luke Puplett

Ich hatte auch diese in Kleinbuchstaben, und das Ändern der Groß- und Kleinschreibung löste das Problem nicht.
Andy Brown

5

Manchmal reicht es nicht aus, die Versionsnummern in den Einstellungen der web.config zu ändern. Dieses Problem tritt auf, weil Visual Studio 2015 nicht über mvc4-Tools verfügt.

Die Lösung besteht darin, Ihr Projekt auf MVC 5 zu aktualisieren. Damit ist das Problem vollständig gelöst. Auf dieser Seite erhalten Sie Hilfe. Es erklärt es klar.

http://www.asp.net/mvc/overview/releases/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web- api-2

Übrigens hat das Visual Studio-Team erklärt, dass es Visual Studio 2015 mit dem ersten Update mvc4-Unterstützung hinzufügen wird.


5

Ich war mehrmals mit diesem Problem konfrontiert und stellte schließlich fest, dass es passiert ist, weil der Ordner mit den Ansichten eine eigene Webkonfiguration enthalten sollte


2
Aber was soll in dieser web.config sein? Sollte es nicht automatisch generiert werden? (Update) Gefunden, was es haben sollte und wie es generiert wird stackoverflow.com/questions/29305914/…
drzaus

Ja, Sie haben Recht, in meinem Projekt existierte Web.Config nicht früher (ja, es sollte automatisch generiert werden, hat aber ein Projekt vom vorherigen Entwickler übernommen, nicht sicher, warum er es gelöscht hat). Nach dem Hinzufügen der Web.Config-Datei für Views-Ordner funktionierte es.
user3559462

2

spät zum Spiel, aber keine dieser Lösungen hat bei mir funktioniert.

Ich habe ein Upgrade auf VS 2017 durchgeführt und die Site hat funktioniert, aber der Visual Studio-Compiler hat die meisten CSHTml-Dateien beschädigt

TLDR;

mysolution.sln hatte die falsche Version

sln diff

Sie möchten also eine neue Lösung mit neuerem VS erstellen und diese mit Ihrer vergleichen und Versionsinformationen kopieren.

vollständige Upgrade-Schritte:

  1. Stellen Sie sicher, dass die SLN-Datei die richtige Version für VS hat
  2. Klicken Sie mit der rechten Maustaste auf MySolution in VS> Nuget Manager> Updates> Alle Updates ausführen
  3. Klicken Sie mit der rechten Maustaste auf MySolution in VS> Anwendung> Ziel-Framework aktualisieren (in meinem Fall 4.5.2).
  4. Beheben Sie alle Versionsprobleme in .config-Dateien (z. B. RAZOR auf 3.0.0.0).
  5. Beheben Sie alle Codeprobleme im Compiler (für mich war ForEach nicht eindeutig)

Mein Projekt wurde in VS2013 gestartet, als ich VS2017 traf, sah ich diese Fehler, aber alles wurde immer noch in Ordnung kompiliert, also versuchte ich herauszufinden, was los war, aber nicht zu schwer. Es wurde zu einem Problem, da das Öffnen einer Ansicht eine große Anzahl von Fehlern verursachte. Ich bin jetzt auf VS2019 und bin über Ihre Lösung gestolpert. du rockst! Meine .sln hatte 14.0.25123.0 und sollte 16.3.9 sein. Ich habe auch Versionsprobleme mit dem Framework behoben. Ich musste Nuget-Pakete (zum Glück) nicht aktualisieren, da ich keine Zeit habe, alle Updates vollständig zu testen.
DaBlue

1

Ich habe viel über einen Arbeitstag damit verschwendet. Ich habe alles in diesem (und anderen) Beiträgen versucht, ohne Erfolg. Schließlich stellte ich fest, dass ich das Projekt auf eine andere Weise öffnen musste. Ich habe gerade eine vorhandene Website auf Visual Studio 2015, MVC5, .NET Framework 4.5.2 aktualisiert und verwende Windows 10, vermute jedoch, dass die Antwort für andere Versionen jeder Softwareanwendung dieselbe gewesen wäre.

Dies ist also die Menüoption, die ich zum Öffnen einer Website ausgewählt habe:

Geben Sie hier die Bildbeschreibung ein

Stattdessen habe ich die csproj-Datei geöffnet, die das Projekt über diese Menüoption definiert:

Geben Sie hier die Bildbeschreibung ein

Ich hatte dann die Option "saubere Lösung", auf die sich viele andere Leute beziehen:

Geben Sie hier die Bildbeschreibung ein

Ich brauchte das jedoch nicht einmal - alles hat einfach funktioniert! Nun, ich bin sowieso zu den nächsten Problemen gekommen ...


1

Ich hatte den Controller von hinzugefügt

  • Schritt 1: Hinzufügen> Klasse
  • Schritt 2: UserController
  • .
  • .
  • .

entsprechender Code erstellt:

namespace SampleApp.Controllers
{
    public class UserController {
    }
}

Meine Fehler wurden durch Ändern von Schritt 1 wie folgt geändert:

  • Schritt 1: Hinzufügen> Controller
  • Schritt 2: Benutzersteuerung
  • .
  • .
  • .

entsprechender Code erstellt:

namespace SampleApp.Controller {
    public class UserController : Controller {
    }
}

Das Problem war: Ich hatte meine Klasse nicht von Controller geerbt

Andere Meldungen in meinem Fehler enthalten - alle von diesem Problem waren:

Fehler CS0117: 'ModelState' enthält keine Definition für 'IsValid'

Fehler CS0103: Der Name 'RedirectToAction' existiert im aktuellen Kontext nicht

Fehler CS0103: Der Name 'Ansicht' existiert im aktuellen Kontext nicht

Fehler CS0103: Der Name 'ViewBag' existiert im aktuellen Kontext nicht

Fehler CS0103: Der Name 'Json' existiert im aktuellen Kontext nicht

Hoffe, diese Änderung hilft denen, die in ihren ersten Schritten nicht aufgepasst haben.


1

Nachdem ich mindestens 90% aller Lösungen / Tricks dieses Themas (und anderer) ausprobiert habe, habe ich es endlich gelöst !! Spoiler-Alarm, es gibt keine Spur von Logik ist die folgende sogenannte "Lösung": Das Ausführen der Lösung mit allen geschlossenen Registerkarten hat endlich funktioniert, als mir nichts anderes erspart hätte: "ViewBag & Co existiert im aktuellen Kontext nicht" ... Du wurdest gewarnt, keine verdammte Logik!

Hoffe es wird jemandem eines Tages helfen ^^


1

In meinem Fall trat dieses Problem nur für ein Projekt auf meinem PC auf. Mein Projekt hat in VS2012 gut funktioniert, aber als es in VS2017 geöffnet wurde, hatte es dieses Problem.

Das Hauptproblem für mich hier war der Cache. Mein Projekt zeigte auf die älteren zwischengespeicherten DLL-Versionen für Razor und MVC und fand keine Funktionen, die in neueren Versionen wie ViewBag hinzugefügt wurden. ViewBag wurde in Razor Version 3 hinzugefügt, aber da ich Razor Version 2 zwischengespeichert hatte, konnte es ViewBag nicht finden (aber es konnte andere Dinge finden, die in Version 2 vorhanden waren). Das einfache Löschen des Cache wie in der akzeptierten Antwort hat mein Problem jedoch nicht behoben. Wir mussten die Konfigurationsdateien so ändern, dass für Razor "Version 3 statt 2 verwenden" und für MVC "Version 5 statt 4 verwenden" angezeigt wurde. Anschließend wurde VS geschlossen, der Cache entfernt, das Projekt geöffnet und neu erstellt. Dann wurden die Dinge repariert. Unten finden Sie detailliertere Anweisungen.

Hier ist die Reihenfolge der Änderungen, die mir geholfen haben, mein Problem zu beheben:

  1. Ändern Sie in der Web.config des Ordners "Ansichten" alle Speicherorte
    • Die MVC-Version ist auf 4.0.0.0 bis 5.0.0.0 eingestellt
    • Die Razor-Version ist auf 2.0.0.0 bis 3.0.0.0 eingestellt

Hier sind diese Zeilen in meinem Fall:

<sectionGroup name="system.web.webPages.razor" type="... Version=3.0.0.0 ...">
    <section name="host" type="... Version=3.0.0.0 ..." .../>
    <section name="pages" type="... Version=3.0.0.0 ..." .../>
</sectionGroup>
...
<host factoryType="... System.Web.Mvc, Version=5.0.0.0 ..." />
...
<pages
    ...
    pageParserFilterType="... Version=5.0.0.0 ..."
    pageBaseType="... Version=5.0.0.0 ..."
    userControlBaseType="... Version=5.0.0.0 ...">
    <controls>
        <add assembly="... Version=5.0.0.0 ..." ... />
    </controls>
</pages>

(Anmerkungen: 1) Ihre Versionen können unterschiedlich sein. Ich sage nur, was in meinem Fall zu tun ist. 2) Ich habe der Kürze halber einige Dinge mit "..." weggelassen. 3) Auch wenn Sie eine MVC-Version wie 5.3.2.0 haben Sie sollten weiterhin 5.0.0.0 eingeben, genau wie bei Razor - geben Sie alle Nullen in 3.0.0.0 ein.

  1. Ändern webPages:versionSie in der Hauptkonfigurationsdatei (die auf der obersten Ebene) von 2.0.0.0 auf 3.0.0.0.

  2. Diese Änderung hatte wahrscheinlich keine Auswirkungen auf die Lösung, aber ich werde sie trotzdem erwähnen. <namespaces>Stellen Sie sicher, dass der Ordnerabschnitt "Ansichten" genau den gleichen Inhalt hat wie die .conifg-Hauptdatei im Stammverzeichnis des Projekts.

<namespaces>
    <add namespace="System.Web.Helpers" />
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Optimization" />
    <add namespace="System.Web.Routing" />
    <add namespace="System.Web.WebPages" />
</namespaces>
  1. Schließen Sie schließlich VS. Löschen Sie alle Cache-Dateien in %LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache(oder wie auch immer Ihr korrekter Pfad lautet), wie es in der (derzeit) akzeptierten Antwort von Fenton vorgeschlagen wird. Löschen Sie auch die .scanDatei, auch wenn sie in dieser Antwort nicht erwähnt wird. Wenn Sie fertig sind, öffnen Sie VS, bereinigen Sie Ihr Projekt und erstellen Sie es neu. Dinge sollten jetzt funktionieren. Es hat bei mir funktioniert.

0

Das Aus- und Wiedereinschalten hat bei mir funktioniert. Sie können versuchen, Visual Studio neu zu starten.


Klingt nach einer Scherzantwort, aber das hat die Dinge für mich behoben. Achselzucken
Douglas Timms

0

Ich konnte das Problem beheben, indem ich oben auf meiner .cshtml-Seite Folgendes hinzufügte

@{ViewBag.Title = "Title";}

Nach dem Neukompilieren konnte ich diese Zeile löschen und der Fehler war verschwunden.


0

Ich hatte ein ähnliches Problem mit einer meiner Ansichten. In meinem Fall habe ich gerade die Lösung aufgeräumt und versucht , sie und ihre Funktionen neu zu erstellen.



0

Ich stand vor dem gleichen Problem. Ich habe die Clean, Build and Rebuild-Lösung ausprobiert, aber bei mir nicht funktioniert.

Also habe ich endlich folgendes gemacht:

  1. Drücken Sie die Windows-Taste + R.
  2. Geben Sie % temp% ein
  3. Drücken Sie die Eingabetaste
  4. Löschen Sie alle Dateien (Wenn nur noch wenige Dateien nicht gelöscht werden, keine Probleme)

Hoffe es funktioniert auch für euch.


0

Nach dem Upgrade einer Anwendung meines Clients von ASP MVC 4 auf ASP MVC 5 hatten wir Designerfehler in Bezug auf HTML-Helfer und ViewBag auf cshtml-Seiten.

Um diese Probleme zu beheben, gehen Sie wie folgt vor: Installieren der Asp.NET Web Helpers Library von Nuget Öffnen Sie die Web.config des Projekts und aktualisieren Sie die Bindungen, wenn sie beispielsweise bei der Installation der Nuget-Pakete nicht aktualisiert wurden

<dependentAssembly>
  <assemblyIdentity name=”System.Web.Mvc publicKeyToken=”31bf3856ad364e35 />
  <bindingRedirect oldVersion=”0.0.0.0-5.2.2.0 newVersion=”5.2.2.0 />
</dependentAssembly>

Suchen Sie in den Einstellungen nach „Webseiten: Version“ und aktualisieren Sie sie auf Version 3.0.0.0. Meine web.config hatte

und ich habe es aktualisiert

Starten Sie Visual Studio neu und erstellen Sie es neu. Möglicherweise müssen Sie den Ordner bin für Ihr Projekt löschen

Besuchen Sie dies: https://lajak.wordpress.com/2014/11/16/asp-mvc-5-viewbag-does-not-exist-in-the-current-context/


-1

Nachdem ich alles andere ausprobiert und mich ein bisschen frustriert gefühlt hatte, aktualisierte ich das .NET Framework in meiner MVC5-App von 4.5 auf 4.5.2. Irgendwie hat es mein Problem behoben. Ich hoffe es hilft.


-4

Ich habe das Ersetzen in web.config gelöst

 <add key="webpages:Enabled" value="false" />

mit

 <add key="webpages:Enabled" value="true" />

Nur um hinzuzufügen, warum dies
abgelehnt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.