Razor View lanciando "Il nome 'modello' non esiste nel contesto attuale"


201

Dopo un significativo refactoring nella mia applicazione MVC 4, Razor mostra questo errore durante il debug di Views:

Il nome "modello" non esiste nel contesto attuale.

Questa è la riga di codice offensiva:

@model ICollection<DataSourceByActive>

So che l'uso di @modelè corretto.

Perché sta succedendo? Come posso ripararlo?


La chiave è "nel contesto attuale". Da qualche parte una parentesi non è stata aperta o chiusa ... Quindi la tua affermazione non è nel contesto che pensi che sia.
Floris,

1
Puoi aggiungere il codice del tuo controller insieme a qualche markup di esempio di ciò che stai cercando di fare?
scniro,

Risposte:


245

Penso che tu abbia incasinato il file web.config che risiede nella cartella Views.

Crea un nuovo progetto indirizzato allo stesso framework .NET e copia il suo file Views / web.config sopra a quello del tuo progetto attuale. Questo risolverà il tuo problema.

Inoltre, come ha commentato Dudeman3000, se nel tuo progetto MVC sono Views\web.configpresenti anche Aree, tutte hanno file.


20
ricorda che se hai aree nel tuo progetto MVC hanno anche tutti i file Views \ web.config!
Dudeman3000,

6
Stranamente il mio web.config nella directory views andava bene, ma web.config del progetto aveva una versione di 2.0.0 delle pagine web. Il rilevamento di errori falsi è andato via quando l'ho fatto 3.0.0.
William T. Mallard,

43
This will fix your problem.Io non l'ho fatto.
Timwi,

2
@AnirudhaGupta Quello nella domanda.
Timwi,

1
Avevo copiato un file web.config valido nella mia cartella Views ma non era incluso nel progetto.
Wildcat Matt,

104

Assicurati di avere i seguenti elementi nella Web.configdirectory del tuo sito e delle visualizzazioni Web.confignella appSettingssezione

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

Per MVC5 utilizzare:

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

(Ed esiste solo nel Web.configfile principale .)


14
Grazie! Per MVC5, il numero di versione deve essere 3.0.0.0. (Ed esiste solo nel file Web.config principale .)
XX

Questa è la risposta corretta che direi mentre cercavo ovunque di cambiare la versione no, ma alla fine questa era l'unica cosa che impediva all'intelligenza del rasoio di funzionare.
Shivam Chopra,

6
Questo ha funzionato per me. Ho dovuto riavviare Visual Studio dopo questa modifica perché tutto funzionasse.
Ravvy,

1
Ho avuto questo problema con MVC 5, il problema era che la chiave esisteva ma era mirata alla versione 2.0.0.0anziché 3.0.0.0. La modifica ha risolto il problema. Grazie!
vaindil,

L'ho usato e ha funzionato, ma l'ho aggiunto solo alle viste web.config. Intellisense è arrivato subito dopo il riavvio di VS.
Matt,

48

Ecco cosa ho fatto:

  1. Chiudi Visual Studio
  2. Elimina il file SUO
  3. Riavvia Visual Studio

Il file .suo è un file nascosto nella stessa cartella del file di soluzione .svn e contiene le Opzioni utente di Visual Studio.


Sì, non ci sono web.configfile per l' ASP.NET Coreapp, quindi questo ha funzionato per me (ho anche aggiunto alcune estensioni per un miglior intellisense).
VMAtm,

2
Non ho nemmeno dovuto cancellare il file SUO. Ho appena chiuso e aperto Visual Studio.
Jim S,

Visual Studio 2019: nessun file suo, l'eliminazione della .vscartella ha aiutato.
Štěpán Havránek

Grazie .. questo è stato per me. .net Core 2.0 app mvc
roblem

2
Visual Studio 2019 qui, chiudi e riapri il problema per me. Grazie.
JordanGW,

26

Ho avuto lo stesso problema, ho creato un nuovo progetto e copiato i file web.config come raccomandato nella risposta di Gupta, ma ciò non ha risolto le cose per me. Ho controllato la risposta di Alex e Liam, ho pensato che questa linea dovesse essere stata copiata dal nuovo web.config, ma sembra che il nuovo progetto stesso non avesse questa linea (MVC5):

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

L'aggiunta della riga al file views / web.config ha risolto il problema per me.


Questo succede se hai aggiornato da asp.net versione 4.0.0 a 4.5.1. Nel mio caso, il mio web.config principale mostrava pagine Web: versione = 2.0.0.0 ma dovrebbe essere 3.0.0.0. L'aggiornamento di questo valore ha risolto il problema.
Veysel Ozdemir,

15

La modifica della seguente riga nella cartella web.config della vista ha risolto lo stesso errore.

A partire dal

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

Per

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

1
Questo ha funzionato anche per me. Avevo aggiornato il rasoio per supportare C # 6 e MVC doveva essere aggiornato anche. Controllare il System.Web.Mvcriferimento dell'assemblaggio per confermare la versione principale necessaria.
James Wilkins,

Ho avuto lo stesso problema. la correzione di tutti gli assemblaggi MVC, Razor ecc. in web.config su x.0.0.0 ha fatto sì che le cose funzionassero di nuovo per me
mamashare

@JamesWilkins Nice, ha lavorato per me. Solo una cosa, elimina il tuo file .suo del progetto e riavvia VS.

buona pesca! Stavo affrontando questo problema dopo aver eseguito l'aggiornamento da .net framework 4.0 a 4.6 e ovviamente indicando una versione dell'assembly errata.
prashant

10

Nel mio caso, ho recentemente aggiornato da MVC 4 a MVC 5, il che rovina il web.config piuttosto male. Questo articolo ha aiutato moltissimo.

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

La linea di fondo è che è necessario controllare tutti i riferimenti del numero di versione in web.config e Views / web.config per assicurarsi che facciano riferimento alle versioni aggiornate corrette associate a MVC 5.


1
Se hai eseguito l'aggiornamento da MVC 4 a MVC 5, questa è la risposta da verificare. Individua esattamente i problemi delle versioni, risolto il mio problema e c'è poco rischio di rompere qualcosa.
R. Schreurs,

10

Passare a @Model da @model ha fatto il lavoro per me.

@model rappresenta il tipo di oggetto Visualizza modello. @Model rappresenta l'oggetto Visualizza modello.


1
Vorrei smettere di dimenticare questo! Grazie per avermi ricordato!
Mike

1
Il numero di volte che devo cercare questo problema è frustrante .. Ma sono contento che sia una soluzione semplice!
Brendan Sluke,

7

Ho trovato una soluzione Se vuoi aggiornare la versione del rasoio o mvc da 4 a 5, cambia alcune righe.

Vecchio codice in Views / web.config

<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>

Sostituito con

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

sectionGroup deve essere anche il cambiamento.


6

Nel mio caso, il seguente codice risulta utile. Inserire il codice seguente nel file Web.config nella cartella Views.

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

Una volta aggiornato il codice, assicurati di pulire e ricostruire la soluzione. Spero che questo ti possa aiutare!


5

Nessuna delle risposte esistenti ha funzionato per me, ma ho trovato ciò che ha funzionato per me confrontando i .csprojfile di diversi progetti. Il seguente manuale di modifica del .csprojfile XML ha risolto il problema Razor-intellisense per me, forse questo può aiutare qualcun altro che ha provato tutte le altre risposte senza risultati. La chiave è rimuovere tutte le istanze di <Private>False</Private>in <Reference>:

<ItemGroup>
  <Reference Include="Foo">
    <HintPath>path\to\Foo</HintPath>
    <!-- <Private>False</Private> -->
  </Reference>
  <Reference Include="Bar">
    <HintPath>path\to\Bar</HintPath>
    <!-- <Private>True</Private> -->
  </Reference>
</ItemGroup>

Non so come siano arrivati ​​o esattamente cosa fanno, forse qualcuno più intelligente di me può aggiungere quelle informazioni. Ero solo felice di risolvere finalmente questo problema.


Grazie per il suggerimento, questo ha funzionato anche per me, per qualsiasi motivo
Scherling,

Ha funzionato anche per me.
Alex,

Questa è stata l'unica opzione che ha funzionato nel mio caso. Ho passato un progetto vs2010 al 2019 e ho lavorato come un incantesimo. Dopo aver salvato il csproj ho provato a decommentare i tag come il file originale e funziona ancora ...
jefissu

3

Per qualche ragione il mio web.config aveva 0.0.0.0 nell'attributo oldVersion:

<runtime>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
      </dependentAssembly>
</runtime>

passare alla 1.0.0.0 era la soluzione:

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>
  </dependentAssembly>

3

Stavo usando un progetto MVC4 con Visual Studio 2019 - e si è scoperto che VS 2019 non supporta MVC 4 immediatamente. Devi installare questo.

passi:

  • Apri il programma di installazione di Visual Studio (Cerca il programma di installazione di Visual Studio in Windows)
  • Fare clic sui singoli componenti
  • Scrivi "mvc" nella casella di ricerca
  • Controlla la scatola mvc4
  • Fai clic su "Modifica" in basso a destra

NOTA: necessario per la chiusura di Visual Studio

inserisci qui la descrizione dell'immagine


2

Nel mio caso, il problema era che dopo aver aggiornato il progetto da MVC 4 a MVC 5 in qualche modo ho perso una modifica della versione in Views / web.config:

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

Aveva ancora la vecchia versione 2.0.0.0. Dopo aver modificato la versione in 3.0.0.0, tutto ha iniziato a funzionare correttamente.

Inoltre, a causa di questo problema, Visual Studio 2015 Community Edition iniziava a scaricare la CPU (utilizzo del 30-40% in idle) ogni volta che aprivo un file .cshtml.


2

Ho avuto lo stesso problema durante la distribuzione in un servizio app di Azure

Nel mio caso è stato perché ~ / Views / Web.config non era incluso nel progetto.

Ha funzionato in IIS Express ma quando ho distribuito su azzurro, ho avuto lo stesso errore. Non essendo incluso nel file .csproj, non è stato distribuito.

La soluzione era assicurarsi che ~ / Views / Web.config fosse incluso nel progetto.

Se vai a Esplora soluzioni e fai clic sull'icona "Mostra tutti i file", quindi apri Viste e potresti vedere un file Web.config non incluso sotto.

Aggiungilo, ripubblicalo e Bob è tuo zio.


1

Per me, il problema era una versione .NET in conflitto in una delle librerie che ho importato di recente. La libreria che ho importato è stata compilata per 4.5.2 e il sito ASP.NET MVC l'ho importata in 4.5. Dopo aver ricompilato detta lib per 4.5, il sito Web sarebbe stato compilato.

Inoltre, non vi erano errori di compilazione, ma il problema veniva segnalato come "avviso". Quindi assicurati di leggere tutti gli avvisi se ce ne sono.


1

Per risolvere questo problema, mi sono assicurato di eseguire l'aggiornamento alla versione MVC più recente utilizzando NuGet e la console di Package Manager.

Pacchetto di installazione Microsoft.AspNet.Mvc -Version 5.2.4

Quindi aggiornato all'ultima versione di Razor

Pacchetto di installazione Microsoft.AspNet.Razor -Version 3.2.4

Quindi ho modificato tutti i file web.config per riflettere la modifica. Come vedrai di seguito:

Nel file web.config principale, assicurati che le pagine web: versione sia corretta. Qui è dove può essere trovato (ignora le altre chiavi):

<configuration>
 <appSettings>
   <add key="webpages:Version" value="3.0.0.0"/>
   <add key="ClientValidationEnabled" value="true"/>
   <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
 </appSettings>
</configuration>

Quindi cerca le altre versioni elencate negli assiemi, controlla la versione dell'assieme con la versione della libreria elencata nei riferimenti del tuo progetto! Potresti non aver bisogno di tutti questi.

<system.web>
    <compilation debug="true" targetFramework="4.6">
        <assemblies>
            <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </assemblies>
    </compilation>
</system.web>

Runtime assemblyBinding dovrebbe mostrare anche la "newversion", vedi dove legge NewVersion 5.2.4.0? Ma controlla anche tutte le altre versioni.

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
        <assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-5.2.4.0" newVersion="5.2.4.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

POI nella sezione Web.Config di Views, assicurati che Razor sia la versione corretta:

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

E infine c'è la sezione Pagine del Web.Config di Views

    <pages
    validateRequest="false"
    pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
      </controls>
    </pages>

1

se si prende questo problema senza alcuna modifica al progetto come me, è necessario modificare il proprio web.config che è stato inserito in Visualizza cartella. basta scrivere una nuova riga premendo Invio o Rimuovi una riga vuota. quindi salva il tuo web.config e ricostruiscilo. il mio problema è stato risolto con questa soluzione


0

Stavo cercando di aggiungere una vista che era al di fuori della mia cartella "Views" (solo per organizzare il mio codice in modo diverso, immagino), quando ho avuto questo problema. La creazione della vista all'interno di Views (come per convenzione) l'ha risolta.


0

Nel mio caso mi mancava @ all'inizio della ricerca

    @foreach (var item in Model)
    {
        <tr class="clickable-row">
            <td class="clickable-field">
                @Html.DisplayFor(modelItem => item.Label)
            </td>
            <td class="clickable-field hidden-xs">
                @Html.DisplayFor(modelItem => item.Value)
            </td>
        </tr>
    }

Questo è importante; Non so perché sei stato sottovalutato.
FlyingV

1
Perché non ha nulla a che fare con la domanda originale.
Ryan,

0

Nel mio caso, ho rimosso per errore il file web.config dalla cartella Views. L'ho aggiunto di nuovo ed era OK.


-3

Ho risolto il problema utilizzando @Modelinvece di modelstampare le variabili.


-8

È probabile che tu usi nel codice una variabile denominata model.

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.