Il nome "ViewBag" non esiste nel contesto corrente - Visual Studio 2015


97

Sto ricominciando a sviluppare in ASP.NET e ho riscontrato un piccolo errore in Visual Studio. I miei file .cshtml mostrano errori quando si utilizzano alcune funzioni Razor. Ad esempio "Il nome" ViewBag "non esiste nel contesto corrente". Ecco una foto:

screenshot del problema in Visual Studio 2015

Sto usando un progetto demo. Puoi trovare il progetto qui: https://github.com/Wintellect/Angular-MVC-Cookbook/tree/master/BasicProject

Ho esaminato diversi altri thread e la maggior parte suggerisce di aggiornare i file web.config. Questi 2 file di configurazione sono già presenti e poiché è una demo piuttosto popolare, presumo che abbia tutta la configurazione richiesta al suo interno. Ovviamente ho esaminato questi file di configurazione e in effetti includono le soluzioni suggerite.

Altri dettagli:

  • Ho già usato clean & rebuild sulla soluzione ma non è cambiato nulla.
  • Quando creo un progetto MVC completamente nuovo, funziona
  • Il mio amico ha lo stesso problema ed entrambi usiamo VS 2015 e Windows 10
  • Posso ancora eseguire l'applicazione e funziona.

Grazie in anticipo.


Quando è ancora in esecuzione è solo un errore nel compilatore in background. Prova a eliminare il file <Projectname> .suo.
Henk Holterman

quale progetto stai conducendo? di base? rozzo, instradamento?
Prashant Ghimire

1
@ Henk purtroppo non ha funzionato.
Michjuh

@Prashant Ho provato sia il progetto di base che il progetto di instradamento. Il problema si verifica in entrambi.
Michjuh

L'hai risolto? Ho avuto lo stesso problema @Michjuh
Burk

Risposte:


123

Ho avuto questo problema nonostante avessi tutta la configurazione corretta.

Si sono rivelati alcuni file danneggiati nella cache dei componenti, che impedivano alle viste Razor di riconoscere ViewBag, Model e HtmlHelpers . L'eliminazione di questi file ha risolto il problema (buone versioni di questi file sono state create la prossima volta che ho aperto Visual Studio).

I file si trovano qui:

%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache

Elimina tutti e quattro i file:

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

Successivamente ho visto lo stesso problema su diverse altre macchine per sviluppatori e questa correzione lo risolve rapidamente.


9
Fantastico, questo ha risolto il problema per me. Ho anche scoperto che anche l'eliminazione dei file temporanei ASP.NET aiuta. C: \ Users \ your.name.here \ AppData \ Local \ Temp \ Temporary ASP.NET Files
Kevin

Questa è stata la soluzione anche per me. Grazie per aver postato!
Caverman

Questo ha risolto il mio problema causato dall'aggiornamento di .net 4 a 4.5.2 e l'aggiornamento di mvc 3 a 5
Joe Phillips

Il mio problema era che le proprietà del mio modello non venivano riconosciute. Questa correzione ha risolto immediatamente il mio problema.
jkerak

5
la mia cartella è 15.0_7e8de76c \ ComponentModelCache per VS 2017.
Kevin .NET

40

Aggiorna i numeri di versione nelle impostazioni del web.configfile nella cartella Visualizzazioni.

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

Se hai aggiornato la versione MVC tramite nuget, dovrebbe essere:

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

Potrebbe essere necessario aggiornare anche altre versioni delle dipendenze. I problemi di compilazione e spazio dei nomi in Views per gli helper e gli oggetti MVC sono in genere correlati a web.configfile incasinati all'interno delle cartelle View.


8
Questo ha funzionato per me, anche se ho dovuto inserire un numero di versione di 5.2.0.0 invece di 5.2.2.0. Puoi vedere quale versione hai andando su Riferimenti> System.Web.MVC e selezionando Proprietà. Grazie per l'aiuto
user2233949

@ user2233949, @Benjamin Sto usando la versione MVC 4.0.0.0, potrei vederlo dalle proprietà. Quale dovrebbe essere la soluzione nel mio caso?
Zeeshan

Controlla tutti i tuoi file web.config e assicurati che tutti stiano utilizzando la versione host corretta. A volte, quando si hanno sovrascritto le impostazioni nelle cartelle di visualizzazione superiore, il problema può sfuggire senza essere corretto.
Benjamin Anderson

1
Ho provato tutti gli altri suggerimenti ma questo ha funzionato per me usando 5.2.3.0. Grazie Benjamin
Mitch

1
Questa è stata la risposta corretta per me. Anche dopo aver cambiato il web.config, non dimenticate di chiudere tutti i vostri *.cshtmlei *.vbhtmlfile e pulita e ricostruire la soluzione. VS 2019 16.1.2
Štěpán Havránek

22

Trova "pagine web: versione" nelle impostazioni dell'app e aggiornalo alla versione 3.0.0.0. Il mio web.config aveva

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

e l'ho aggiornato a

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

1
Ho rimosso entrambe le righe (
webpages.Version

Questo dovrebbe essere aggiornato in entrambe le versioni di Web.config, nella root del progetto e anche in Web.configs di qualsiasi area.
Sonu K

Grazie. Nel mio caso, i tag problematici sono in <configuration> - <configSections> - <sectionGroup name = "system.web.webPages.razor"> Devo modificare <sectionGroup name = "system.web.webPages.razor">, <section name = "host"> e <section name = "pages"> per utilizzare la versione = 3.0.0.0
Hong

La rimozione della cache ovunque (incluso Temporary ASP.NET Files) non ha aiutato, ma questa risposta lo ha fatto .
qualunque cosa il

Che cosa significa questa impostazione anche significa ? A cosa corrisponde? Come si determina da quale versione si dipende nella propria app?
jpmc26

17

L'ho rimosso accidentalmente web.configdalla Viewscartella, pensando che non fosse necessario. Quando l'ho rimesso a posto ha iniziato a funzionare.


13

Dopo aver provato tutto sotto il sole, si è scoperto che qualcosa aveva modificato il mio System.Web.WebPages.Razor <sectionGroup>in /Views/Web.Configdal corretto CamelCase System.Web.WebPages.Razora un tutto minuscolo system.web.webpages.razorche alla fine era la mia scomparsa.

Sperando che questo possa aiutare qualche altra povera anima con questo problema ...

Per riferimento, questa è la voce corretta (per il mio scenario)

<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
Il mio era tutto minuscolo ma non ha risolto il mio problema.
Paul Totzke

Carpa sacra. Questa è stata anche la mia morte. Non posso credere che tu l'abbia scoperto, @jbwedtech.
Luke Puplett

Anch'io avevo questi in minuscolo e cambiare il case non ha risolto il problema.
Andy Brown

5

A volte non è sufficiente modificare i numeri di versione nelle impostazioni del web.config. Questo problema si verifica perché Visual Studio 2015 non dispone degli strumenti mvc4.

La soluzione è aggiornare il progetto a MVC 5. Risolve totalmente il problema. Puoi ottenere aiuto da questa pagina. Lo spiega chiaramente.

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

A proposito, il team di Visual Studio ha dichiarato che aggiungerà il supporto mvc4 a Visual Studio 2015 con il primo aggiornamento.


5

ho affrontato questo problema più volte e alla fine ho scoperto che è successo perché la cartella delle viste dovrebbe contenere la propria configurazione web


2
Ma cosa dovrebbe esserci in quel web.config? Non dovrebbe essere autogenerato? (aggiornamento) è quello che dovrebbe avere e come è generato stackoverflow.com/questions/29305914/...
drzaus

Sì, hai ragione, nel mio progetto Web.Config non esisteva prima (sì, dovrebbe essere generato automaticamente ma ha preso un progetto dallo sviluppatore precedente, non sono sicuro del motivo per cui lo ha cancellato). Dopo aver aggiunto il file Web.Config per le cartelle Views, ha funzionato.
user3559462

2

in ritardo al gioco, ma nessuna di queste soluzioni ha funzionato per me.

Sono stato aggiornato a VS 2017 e il sito ha funzionato, ma il compilatore di Visual Studio ha rotto la maggior parte dei file .cshtml

TLDR;

mysolution.sln aveva la versione sbagliata

sln diff

quindi vuoi creare una nuova soluzione con il nuovo VS e confrontarla con la tua e copiare le informazioni sulla versione.

passaggi di aggiornamento completo:

  1. assicurarsi che il file .sln abbia una versione corretta per VS.
  2. fare clic con il tasto destro su MySolution in VS> Nuget Manager> Aggiornamenti> esegui tutti gli aggiornamenti
  3. fare clic con il tasto destro su MySolution in VS> Applicazione> Aggiorna Target Framework (4.5.2 nel mio caso)
  4. risolvere eventuali problemi di versione nei file .config (ad esempio RAZOR a 3.0.0.0)
  5. risolvere eventuali problemi di codice nel compilatore (per me ForEach era ambiguo)

Il mio progetto è stato avviato in VS2013, quando ho colpito VS2017 ho iniziato a vedere questi errori ma tutto è stato compilato ancora bene, quindi ho cercato di capire cosa stava succedendo ma non troppo difficile. Stava diventando un problema perché l'apertura di una vista creava un gran numero di errori. Ora sono su VS2019 e sono incappato nella tua correzione; Sei forte! Il mio .sln aveva 14.0.25123.0 e doveva essere 16.3.9. Ho anche risolto eventuali problemi di versione con il framework. Non ho dovuto aggiornare i pacchetti nuget (per fortuna) poiché non ho tempo per testare completamente tutti gli aggiornamenti.
DaBlue

1

Ho sprecato molto più di una giornata lavorativa su questo. Ho provato tutto in questo (e in altri) post, senza alcun risultato. Alla fine ho scoperto che avevo bisogno di aprire il progetto in un modo diverso. Ho appena aggiornato un sito Web esistente a Visual Studio 2015, MVC5, .NET framework 4.5.2 e sto usando Windows 10, ma sospetto che la risposta sarebbe stata la stessa per le altre versioni di ciascuna applicazione software.

Quindi questa è l'opzione di menu che stavo scegliendo per aprire un sito Web:

inserisci qui la descrizione dell'immagine

Invece di questo, ho aperto il file csproj che definisce il progetto usando questa opzione di menu:

inserisci qui la descrizione dell'immagine

Poi ho avuto l'opzione "soluzione pulita" a cui molte altre persone si riferiscono:

inserisci qui la descrizione dell'immagine

Tuttavia, non ne avevo nemmeno bisogno: tutto ha funzionato! Bene, sono passato alla prossima serie di problemi, comunque ...


1

Avevo aggiunto il controller da

  • Passaggio 1: Aggiungi> Classe
  • Passaggio 2: UserController
  • .
  • .
  • .

codice corrispondente creato:

namespace SampleApp.Controllers
{
    public class UserController {
    }
}

I miei errori sono stati modificati modificando il passaggio 1 come:

  • Passaggio 1: Aggiungi> Controller
  • Passaggio 2: controller utente
  • .
  • .
  • .

codice corrispondente creato:

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

Il problema era: non avevo ereditato la mia classe da Controller

Altri messaggi nel mio errore inclusi, che provenivano da questo problema:

errore CS0117: "ModelState" non contiene una definizione per "IsValid"

errore CS0103: il nome "RedirectToAction" non esiste nel contesto corrente

errore CS0103: il nome "Visualizza" non esiste nel contesto corrente

errore CS0103: il nome "ViewBag" non esiste nel contesto corrente

errore CS0103: il nome "Json" non esiste nel contesto corrente

Spero che questo cambiamento aiuti coloro che non hanno prestato attenzione nei loro passi iniziali.


1

Dopo aver provato almeno il 90% di ogni soluzione / trucco di questo argomento (e di altri), finalmente l'ho risolto !! Avviso spoiler, non c'è traccia di logica è la seguente cosiddetta "soluzione": L'esecuzione della soluzione con tutte le schede chiuse alla fine ha funzionato, quando nient'altro mi avrebbe risparmiato il "ViewBag & Co non esiste nel contesto attuale" ... Sei stato avvertito, niente logica!

Spero che un giorno possa aiutare qualcuno ^^


1

Nel mio caso ho riscontrato questo problema solo sul mio PC per un solo progetto. Il mio progetto ha funzionato bene in VS2012 ma quando è stato aperto in VS2017 presentava questo problema.

Il problema principale per me qui era la cache. Il mio progetto puntava alle versioni precedenti memorizzate nella cache di dll per Razor e MVC e non trovava funzionalità aggiunte nelle versioni più recenti, come ViewBag. ViewBag è stato aggiunto in Razor versione 3, ma poiché avevo Razor versione 2 memorizzata nella cache non è stato possibile trovare ViewBag (ma potrebbe trovare altre cose che erano presenti nella versione 2). Tuttavia, semplicemente svuotare la cache come nella risposta accettata non ha risolto il mio problema. Abbiamo dovuto modificare i file di configurazione in modo che dicessero "usa la versione 3 invece di 2" per Razor e "usa la versione 5 invece di 4" per MVC, quindi chiudendo VS, rimuovendo la cache, aprendo il progetto e ricostruendo. Poi le cose si sono aggiustate. Di seguito sono riportate istruzioni più dettagliate.

Ecco la sequenza di modifiche che mi hanno aiutato a risolvere il mio problema:

  1. Nella cartella "Visualizzazioni" Web.config cambia tutte le posizioni in cui
    • La versione MVC è impostata da 4.0.0.0 a 5.0.0.0
    • La versione Razor è impostata da 2.0.0.0 a 3.0.0.0

Ecco quelle righe nel mio caso:

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

(note: 1) le tue versioni potrebbero essere diverse, sto solo dicendo cosa era necessario fare nel mio caso 2) Ho omesso alcune cose con "..." per brevità 3) anche se hai una versione MVC qualcosa come 5.3.2.0 dovresti comunque inserire 5.0.0.0, lo stesso con la versione di Razor - inserisci tutti zeri in 3.0.0.0)

  1. Nel file di configurazione principale (quello al livello superiore) cambia webPages:versionda 2.0.0.0 a 3.0.0.0.

  2. Questa modifica probabilmente non ha influito sulla soluzione, ma ne parlerò comunque. Assicurati che la <namespaces>sezione della cartella "Visualizzazioni" abbia esattamente gli stessi contenuti del file .conifg principale alla radice del progetto, qualcosa come:

<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. Infine, chiudi VS. Elimina tutti i file della cache in %LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache(o qualunque sia il tuo percorso corretto) proprio come suggerito nella risposta (attualmente) accettata da Fenton. Elimina anche il .scanfile, anche se non è menzionato in quella risposta. Una volta terminato, apri VS, pulisci il tuo progetto e ricostruiscilo. Le cose dovrebbero funzionare adesso. Ha funzionato per me.

0

Spegnerlo e riaccenderlo ha funzionato per me. Puoi provare a riavviare Visual Studio.


Sembra una risposta scherzosa, ma questo è ciò che ha risolto le cose per me. scrollata di spalle
Douglas Timms

0

Sono stato in grado di risolvere il problema aggiungendo quanto segue all'inizio della mia pagina .cshtml

@{ViewBag.Title = "Title";}

Dopo la ricompilazione sono stato in grado di eliminare questa riga e l'errore è sparito.


0

Ho affrontato un problema simile con uno dei miei punti di vista. Nel mio caso ho solo ripulito la soluzione e ho provato a ricostruirla e funziona.



0

Ho affrontato lo stesso problema. Ho provato la soluzione Clean, Build and Rebuild, ma non ha funzionato per me.

Quindi alla fine ho fatto come di seguito:

  1. Premi il tasto Windows + R.
  2. Tipo % temp%
  3. Premi Invio
  4. Elimina tutti i file (se pochi file vengono lasciati non eliminati, nessun problema)

Spero che funzioni anche per voi ragazzi.


0

Dopo aver aggiornato una delle applicazioni del mio cliente da ASP MVC 4 a ASP MVC 5, abbiamo riscontrato errori di progettazione relativi agli helper HTML e a ViewBag nelle pagine cshtml.

Per risolvere questi problemi, assicurati di eseguire le seguenti operazioni: Installa la libreria degli helper Web di Asp.NET da Nuget Apri il Web.config del progetto e aggiorna i collegamenti se non sono stati aggiornati durante l'installazione dei pacchetti Nuget, ad esempio

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

Trova "pagine web: versione" nelle impostazioni dell'app e aggiornalo alla versione 3.0.0.0. Il mio web.config aveva

e l'ho aggiornato a

Riavvia Visual Studio e ricostruisci. Potrebbe essere necessario eliminare la cartella bin per il progetto

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


-1

Dopo aver provato tutto il resto e sentendomi un po 'frustrato, ho aggiornato il framework .NET sulla mia app MVC5 da 4.5 a 4.5.2. In qualche modo ha risolto il mio problema. Spero che sia d'aiuto.


-4

Ho risolto la sostituzione in web.config

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

con

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

Solo per aggiungere al motivo per cui questo è stato votato verso il basso - consente alla vista effettiva di essere visibile da un browser credo
mtbennett
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.