Il nome "modello" non esiste nel contesto corrente in MVC3


119

Ho aggiunto una pagina cshtml in un progetto. Quando ho provato ad aggiungere la seguente dichiarazione, ottengo un errore: "Il nome 'modello' non esiste nel contesto corrente".

@model xyz.abc.SomeClass

Ho controllato i riferimenti, sono tutti a posto. Ho aggiunto un web.config nella cartella di visualizzazione, ma non è stato risolto.

C'è qualcosa che mi manca?


Se stai cercando una soluzione MVC4, la risposta di Adam è valida, devi trovare il numero di versione corretto dal tuo web.config principale e usarlo qui. MVC4 Views Folder web.config mancava la riga <host> e ne copiava una da root web.config (potrebbe avere altri valori diversi, quindi controlla il tuo) e inseriscila in Views. Quindi abbiamo chiuso il progetto e ricaricato in Visual Studio e ha funzionato.
Farrukh Subhani

Risposte:


238

Aggiornamento: se stai usando una versione più recente di MVC, si applica lo stesso processo, assicurati solo di usare il numero di versione corretto nella <host>riga web.config .

Bene, mi sono ritrovato a sperimentare la stessa cosa che hai fatto tu e, dopo un po 'di ricerca, ho scoperto qual è il problema!

È necessario includere il file MVC3 web.config predefinito per la cartella Views. MVC3 ne ha due: uno nella radice per l'applicazione e uno per la cartella delle visualizzazioni. Ha una sezione per gli spazi dei nomi inclusi. Assicurati che il tuo assomigli a questo:

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.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>

Ti suggerisco di creare un nuovo progetto MVC3, quindi copiare semplicemente il file web.config creato per te nella cartella delle viste.

Importante Dopo averlo fatto, è necessario chiudere il file e riaprirlo. Ecco! Intellisense!


1
Non posso contrassegnarlo come risposta, ma questo era anche il mio problema. Ho dimenticato di aggiungere queste sezioni a web.config.
Dave

Sì, vorrei poter segnare il tuo come risposta. Sono rimasto bloccato su questo per un po '(ho rinunciato dopo il mio primo tentativo di conversione in Razor fallito), e questo è stato il problema fin dall'inizio. Grazie!
Brian Donahue

3
Non funziona per me. O, almeno, a volte ottengo intellisense ea volte no, anche se ho tutto questo impostato nel web.config nella cartella Views.
Tom Lianza

Grazie mille! Ha salvato la mia giornata!
Sergey

9
assicurati di aggiornare alla versione più recente (per MVC 5 qui) nel tuo MAINfile web.config<add key="webpages:Version" value="3.0.0.0" />
Simon_Weaver

30

Ho riscontrato lo stesso problema quando ho creato una nuova area per organizzare le mie pagine. La mia struttura sembrava:

WebProject

- [] Areas
    - [] NewArea
        - [] Controllers
        - [] Views
- [] Controllers
- [] Views
    - Web.config
- Web.config

Le visualizzazioni create nella cartella Views in WebProject hanno funzionato correttamente, ma le visualizzazioni create in NewArea hanno generato il seguente errore:

Il nome "modello" non esiste nel contesto corrente.

Per risolvere questo problema, ho copiato web.config nella cartella Views sotto il WebProject nella cartella Views in NewArea. Vedi sotto.

WebProject

- [] Areas
    - [] NewArea
        - [] Controllers
        - [] Views
            - **Web.config**
- [] Controllers
- [] Views
    - Web.config
- Web.config

Mi sono imbattuto in questo perché ho creato manualmente questa nuova area usando Aggiungi -> Nuova cartella per aggiungere le cartelle. Avrei dovuto fare clic con il pulsante destro del mouse sul progetto e selezionare Aggiungi -> Area. Quindi Visual Studio si sarebbe preso cura di impostare l'area correttamente.


2
+1 ... ho appena notato che per qualche motivo quel web.config non era incluso, contento di aver trovato la tua risposta per risolvere il mio problema
pollirrata

2
Mi rendo conto che è vecchio, ma in realtà ho avuto lo stesso problema oggi, quindi volevo ringraziare per questa risposta. :)
Ricky Mutschlechner

Anch'io ho avuto lo stesso problema e la soluzione simile. Il mio Views/Web.configè stato riferimento a System.Web.Mvc.MvcWebRazorHostFactoryversione 5.0.0.0, e ho avuto un terzo Area riferimento v4.0 e con le opinioni cooperare. Sono Views/Web.configtornato alla v4.0 e tutto ha funzionato.
Codici con martello

è stato specificamente il tuo commento sulla sovrascrittura di web.config con quello dalla cartella Views che mi ha aiutato a risolvere questo problema. semplicemente rendere il contenuto esattamente lo stesso non funziona per qualche folle ragione. AAARRRGGGHHH! ;)
Ryan Vettese

Nel mio caso, utilizzo robocopy per sincronizzare la versione locale con la versione del server, esclusi tutti i file web.config. senza il file web.config nella versione server, verrà visualizzato questo errore.
Will Wu

11

Se le tue viste sono in un assembly della libreria di classi, che è utile per il riutilizzo delle viste condivise tra i progetti, fare semplicemente ciò che Adam suggerisce potrebbe non essere sufficiente. Ho ancora avuto problemi anche con quello.

Prova questo nel tuo web.config nella radice del tuo progetto:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <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>
  </configSections>
  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <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.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>
  <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=2.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=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      </assemblies>
    </compilation>
    <pages>
      <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.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
</configuration>

E questo nel web.config nella cartella delle visualizzazioni:

<?xml version="1.0"?>

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

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.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>
    <pages
        validateRequest="false"
        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=4.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>

Questo ha funzionato per me. Ora ho intellisense e nessun errore di compilazione nelle mie visualizzazioni in un progetto non MVC a cui posso fare riferimento da più siti Web MVC.


1
È per i file web.config nel tuo progetto web o per i file web.config nella tua libreria di classi?
theJerm

7

Mi sono imbattuto in questo problema quando ho inavvertitamente avuto una copia del file di visualizzazione (About.cshtml) per il percorso / about nella directory principale. (Non la cartella delle viste) Dopo aver spostato il file fuori dalla radice, il problema è andato via.


1
Grazie! Sono appena impazzito con lo stesso problema e questa è stata la risposta ;-)
Rob

Freddo! Ricordo anche di essere impazzito. :)
James Lawruk

Avevo alcuni file .cshtml in una cartella nella directory principale, che causava il fallimento solo della cartella nelle mie viste ... while (true) {bashHeadToWall; }. Grazie.
matt.j.crawford

7

Ha avuto problemi simili utilizzando VS2012 e VS2013.
L'aggiunta della seguente riga a <appSettings> nel web.config principale ha funzionato:

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

Se la linea era già presente ma diceva 2.0.0.0, cambiarla in 3.0.0.0 ha funzionato.


Questo è stato anche il mio problema dopo aver eseguito un aggiornamento MVC. Diceva 2.0.0.0, passando a 3, ha funzionato.
FerX32

6

Aggiornamento: 5/5/2015 Per il tuo progetto MVC 5 devi impostare la versione su 5.0.0.0 nel tuo /views/web.config

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

1
Sì, ho trovato la versione 5.2.0.0 che causa il problema, ma cambiarla in 5.0.0.0 lo ha risolto !!! Grazie.
vendettamit

5

Mentre dichiari il modello nella parte superiore della vista usando un codice come questo:

@model MyModel

devi inserire in maiuscolo i tuoi riferimenti ad esso di seguito, ad esempio:

@Html.Encode(Model.MyDisplayValue)

Credo che un web.config mancante nella cartella Views sarebbe la causa principale di ciò, ma se il problema viene risolto e il problema persiste, controlla di utilizzare Model , non model per fare riferimento ad esso nella fonte.


1
Questo risolve l'errore quando il problema è che stai cercando di fare riferimento al tuo modello nel tuo codice nella vista, come quando crei il tuo helper che non si basa su espressioni lambda ecc.
JohnC

3

Mi sono imbattuto anche in questo problema. Le mie circostanze erano un po 'diverse.

  1. Una delle mie cartelle di visualizzazione è stata spostata accidentalmente nella directory principale del mio progetto. Questo ha portato alla project_root/SignUp/ViewNamecorrispondenza del percorso prima project_root/Views/SignUp/ViewName. Ciò ha causato l' @modelerrore.

  2. Dopo aver spostato di nuovo le viste nella posizione appropriata, la directory è stata in qualche modo ricreata nella radice del progetto. Questa volta, vuoto. /SignUp/ViewNameha funzionato, ma /SignUp/ha 403 - Forbidden: Access is denied.generato un errore. L' intera cartella deve essere rimossa dalla radice del progetto.

Spero che questo aiuti qualcuno. Ho passato ore a credere che il problema fosse causato dal nostro recente aggiornamento da MVC 3 a MVC 4. Solo una nota: i problemi di aggiornamento dovrebbero verificarsi solo tra MVC 2 e MVC 3. Se vedi questo problema nelle versioni successive, probabilmente non è dovuto al l'aggiornamento.


2

Mi ci sono voluti anni per risolvere questo problema, ma finalmente spero di averlo risolto su MVC, che è simile:

Ho reinstallato ASP.NET 4.5 ( http://www.asp.net/downloads )

Ho seguito il tutorial sull'aggiornamento su http://www.asp.net/whitepapers/mvc4-release-notes

MA questo paragrafo menzionato è sbagliato per me

System.Web.Mvc, Version=4.0.0.0
System.Web.WebPages, Version=2.0.0.0
System.Web.Helpers, Version=2.0.0.0
System.Web.WebPages.Razor, Version=2.0.0.0

Poiché ho Razor in System.Web.Razor , ho cambiato lo spazio dei nomi razor in System.Web.Razor.

Aggiungilo al tuo file web.config

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

Ho aggiunto il riferimento all'assembly a tutti questi assembly sopra

Trovare l'elemento ProjectTypeGuids e sostituire {E53F8FEA-EAE0-44A6-8774-FFD645390401} con {E3E379DF-F4C6-4180-9B81-6769533ABE47}.

Questo è tutto.


1
L'aggiunta di appsettings a webconfig l'ha risolto per me. Anche se penso che <add key="webpages:Version" value="2.0.0.0" />sia il fattore trainante, l'altra impostazione non è necessaria.
Scarpa

1
per MVC 5 deve essere, 3.0.0.0ma sì, è molto importante!
Simon_Weaver

2

È un errore orribile ma:

Assicurati di avere i file Web.config nella tua visualizzazione in remoto . Forse hai saltato il caricamento tramite i filtri del tuo programma Ftp.


2

Mi mancava web.config in Aree / Area personale / Visualizzazioni / web.config. Una volta aggiunto, ha funzionato bene. Questo era con MVC 5 e .NET4.5


Anche il mio mancava, con l'aiuto di questo sito, l'ho riavviato. forums.asp.net/t/…
Perposterer

0

C'è anche un'altra ragione. Nel mio caso, ho dovuto copiare un file index.cshtml nella cartella principale web (fuori dalla cartella Views) come backup dal server remoto.

Quindi, ho continuato a cambiare il mio /views/web.config, ho continuato a cambiare il mio /views/home/index.cshtml e l'errore continuava a verificarsi ... finché non ho scoperto /index.cshtml fuori dalla cartella delle viste, l'ho cancellato e certo, tutto è tornato alla normalità!


0

Ho riscontrato lo stesso problema, ma nel mio caso l'unica cosa che era cambiata è che avevo disinstallato Visual Studio 2012 e installato Visual Studio 2013. Ho aperto la nostra soluzione, ma continuavo a ricevere lo stesso The name 'model' does not exist in current contexterrore in ogni vista Razor.

Il mio collega ha suggerito di controllare gli aggiornamenti per VS2013. Dopo aver installato l' aggiornamento 1 di VS2013 , ho smesso di ricevere questo errore.


1
Ricevo questo errore con VS2013 Update 2 . Con l'aggiornamento 1 funzionava bene. Non sono ancora riuscito a trovare una soluzione. Ho tentato di disinstallare l'aggiornamento 2, ma questo ha provocato l'arresto anomalo di VS dopo l'apertura di un file cshtml.
iheartcsharp

Ho lo stesso problema con VS2013 Update 2.
EricP

0

Controlla il tuo file di configurazione nella directory delle viste. nell'aggiungere la chiave per MVC 4/5


0

La reinstallazione del nuget lo ha risolto per me

PM> Pacchetto di installazione Microsoft.AspNet.Razor -Version 3.2.3


0

Per me questo era il problema. L'intero blocco mancava dalla sezione.

  <assemblies>
    <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Helpers, Version=2.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=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
  </assemblies>

0

Ho lo stesso problema dopo aver aggiornato i pacchetti. Ho fatto tutto ciò che hai scritto sopra in questo argomento, ma il sottostante rosso della parola chiave modello non è scomparso. Successivamente, soluzione trovata: ho appena eliminato la cartella "pacchetto" dalla directory del mio progetto e ricostruito, nel frattempo ha permesso a NuGet di ripristinare i pacchetti mancanti. Rinfrescato ed è fatto!



0

Stavo affrontando lo stesso problema e poi ho trovato una soluzione. La soluzione è:

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

Il file .suo è un file nascosto nella stessa cartella in cui esiste il file della soluzione .svn . Spero che funzionerà!

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.