Razor View wirft "Der Name 'Modell' existiert im aktuellen Kontext nicht"


200

Nach erheblichen Umgestaltungen in meiner MVC 4-Anwendung zeigt Razor diesen Fehler beim Debuggen von Views an:

Der Name 'Modell' existiert im aktuellen Kontext nicht.

Dies ist die fehlerhafte Codezeile:

@model ICollection<DataSourceByActive>

Ich weiß, dass die Verwendung von @modelkorrekt ist.

Warum passiert dies? Wie kann ich es reparieren?


Der Schlüssel ist "im aktuellen Kontext". Irgendwo wurde eine Klammer nicht geöffnet oder geschlossen ... Ihre Aussage steht also nicht in dem Kontext, den Sie denken.
Floris

1
Können Sie Ihren Controller-Code zusammen mit einem Beispiel-Markup für das, was Sie versuchen, hinzufügen?
Scniro

Antworten:


244

Ich denke, Sie haben die Datei web.config, die sich im Ordner Views befindet, durcheinander gebracht.

Erstellen Sie ein neues Projekt, das auf dasselbe .NET-Framework abzielt, und kopieren Sie die Datei Views / web.config über die Datei in Ihrem aktuellen Projekt. Dies wird Ihr Problem beheben.

Wie Dudeman3000 kommentierte, haben alle Bereiche in Ihrem MVC-Projekt auch Views\web.configDateien.


20
Denken Sie daran, dass alle Bereiche in Ihrem MVC-Projekt auch Views \ web.config-Dateien enthalten!
Dudeman3000

6
Seltsamerweise war meine web.config im Verzeichnis views in Ordnung, aber die web.config des Projekts hatte eine Webseitenversion von 2.0.0. Die falsche Fehlererkennung verschwand, als ich 3.0.0 machte.
William T. Mallard

43
This will fix your problem.Es hat nicht.
Timwi

2
@ AnirudhaGupta Der in der Frage.
Timwi

1
Ich hatte eine gültige web.config-Datei in meinen Views-Ordner kopiert, diese war jedoch nicht im Projekt enthalten.
Wildcat Matt

104

Stellen Sie sicher, dass Sie sowohl in Ihrer Site Web.configals auch im Ansichtsverzeichnis Web.configim appSettingsAbschnitt Folgendes haben

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

Für MVC5 verwenden Sie:

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

(Und es existiert nur in der Hauptdatei Web.config.)


14
Vielen Dank! Für MVC5 muss die Versionsnummer sein 3.0.0.0. (Und es existiert nur in der Hauptdatei Web.config.)
XEC

Dies ist die richtige Antwort, die ich sagen würde, da ich überall versucht habe, die Version Nr. Zu ändern, aber am Ende war dies das einzige, was die Intelligenz des Rasiermessers daran hinderte, zu funktionieren.
Shivam Chopra

6
Das hat bei mir funktioniert. Nach dieser Änderung musste ich Visual Studio neu starten, damit alles funktioniert.
Ravvy

1
Ich hatte dieses Problem mit MVC 5, das Problem war, dass der Schlüssel vorhanden war, aber 2.0.0.0stattdessen auf die Version abzielte 3.0.0.0. Eine Änderung hat das Problem behoben. Danke dir!
Vaindil

Ich habe dies verwendet und es hat funktioniert, aber ich habe es nur zu den Ansichten web.config hinzugefügt. Intellisense wurde direkt nach einem Neustart von VS gestartet.
Matt

48

Folgendes habe ich getan:

  1. Schließen Sie Visual Studio
  2. Löschen Sie die SUO-Datei
  3. Starten Sie Visual Studio neu

Die .suo-Datei ist eine versteckte Datei im selben Ordner wie die .svn-Lösungsdatei und enthält die Visual Studio-Benutzeroptionen.


Ja, es gibt keine web.configDatei für die ASP.NET CoreApp, daher hat dies für mich funktioniert (es wurden auch einige Erweiterungen für eine verbesserte Intelligenz hinzugefügt).
VMAtm

2
Ich musste nicht einmal die SUO-Datei löschen. Ich habe gerade Visual Studio geschlossen und geöffnet.
Jim S

Visual Studio 2019: Keine Suo-Datei, das Löschen des .vsOrdners hat geholfen.
Štěpán Havránek

Danke .. das hat es für mich getan. .net Core 2.0 MVC App
Problem

2
Visual Studio 2019 hier, schließen und wieder öffnen hat es für mich behoben. Vielen Dank.
JordanGW

26

Ich hatte das gleiche Problem, ich habe ein neues Projekt erstellt und die web.config-Dateien kopiert, wie in der Antwort von Gupta empfohlen, aber das hat die Dinge für mich nicht behoben. Ich habe die Antwort von Alex und Liam überprüft. Ich dachte, diese Zeile muss aus der neuen web.config kopiert worden sein, aber es sieht so aus, als hätte das neue Projekt selbst diese Zeile nicht (MVC5):

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

Das Hinzufügen der Zeile zur Datei views / web.config hat das Problem für mich behoben.


Dies geschieht, wenn Sie ein Upgrade von asp.net Version 4.0.0 auf 4.5.1 durchgeführt haben. In meinem Fall zeigte meine Haupt-web.config Webseiten an: Version = 2.0.0.0, aber es sollte 3.0.0.0 sein. Durch Aktualisieren dieses Werts wurde das Problem behoben.
Veysel Ozdemir

15

Das Ändern der folgenden Zeile in der Datei web.config des Ansichtsordners hat den gleichen Fehler behoben.

Von

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

Zu

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

1
Das hat auch bei mir funktioniert. Ich hatte Razor aktualisiert, um C # 6 zu unterstützen, und MVC muss ebenfalls aktualisiert worden sein. Überprüfen Sie Ihre System.Web.MvcBaugruppenreferenz, um die Hauptversion zu bestätigen, die Sie benötigen.
James Wilkins

Ich hatte das gleiche Problem. Durch das Reparieren aller MVC-, Razor usw.-Assemblys in web.config auf x.0.0.0 funktionierten die Dinge wieder für mich
mamashare

@ JamesWilkins Schön, hat für mich gearbeitet. Nur eine Sache, löschen Sie danach Ihre Projekt-SUO-Datei und starten Sie VS neu.

guter Fang! Ich hatte dieses Problem, nachdem ich ein Upgrade von .net Framework 4.0 auf 4.6 durchgeführt hatte und offensichtlich auf eine falsche Assembly-Version hingewiesen hatte.
Prashant

10

In meinem Fall habe ich kürzlich ein Update von MVC 4 auf MVC 5 durchgeführt, was die web.config ziemlich durcheinander bringt. Dieser Artikel hat enorm geholfen.

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

Unter dem Strich müssen Sie alle Ihre Versionsnummernreferenzen in Ihrer web.config und Views / web.config überprüfen, um sicherzustellen, dass sie auf die richtigen aktualisierten Versionen verweisen, die mit MVC 5 verknüpft sind.


1
Wenn Sie ein Upgrade von MVC 4 auf MVC 5 durchgeführt haben, ist dies die zu überprüfende Antwort. Es zeigt genau die Versionsprobleme auf, hat mein Problem gelöst und es besteht nur ein geringes Risiko, etwas zu beschädigen.
R. Schreurs

10

Der Wechsel von @model zu @Model hat den Job für mich erledigt.

@model repräsentiert den Objekttyp View Model. @Model repräsentiert das View Model-Objekt.


1
Ich wünschte, ich würde aufhören, das zu vergessen! Danke, dass du mich erinnert hast!
Mike

1
Die Häufigkeit, mit der ich dieses Problem nachschlagen muss, ist frustrierend. Aber ich bin froh, dass es eine einfache Lösung ist!
Brendan Sluke

7

Ich habe eine Lösung gefunden. Wenn Sie die Rasiermesserversion oder mvc 4 auf 5 aktualisieren möchten, ändern Sie einige Zeilen.

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

Ersetzt mit

<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 muss auch geändert werden.


6

In meinem Fall erweist sich der folgende Code als nützlich. Platzieren Sie den folgenden Code in der Datei Web.config im Ordner Ansichten.

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

Stellen Sie nach der Aktualisierung des Codes sicher, dass die Lösung bereinigt und neu erstellt wird. Ich hoffe das hilft dir weiter!


5

Keine der vorhandenen Antworten für mich gearbeitet, aber ich fand , was tat für mich Arbeit durch die Vergleich .csprojDateien von verschiedenen Projekten. Die folgende manuelle Bearbeitung der .csprojXML-Datei hat das Razor-Intellisense-Problem für mich gelöst. Vielleicht kann dies jemand anderem helfen, der alle anderen Antworten ohne Erfolg ausprobiert hat. Key ist jede Instanzen zu entfernen <Private>False</Private>in der <Reference>‚s:

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

Ich weiß nicht, wie diese dorthin gekommen sind oder was sie genau tun. Vielleicht kann jemand, der klüger als ich ist, diese Informationen hinzufügen. Ich war einfach froh, dieses Problem endlich lösen zu können.


Danke für den Vorschlag, das hat auch bei mir funktioniert, aus welchem ​​Grund auch immer
Scherling

Hat auch für mich gearbeitet.
Alex

Das war die einzige Option, die in meinem Fall funktioniert hat. Ich habe ein vs2010-Projekt auf 2019 umgestellt und wie ein Zauber gearbeitet. Nach dem Speichern des csproj habe ich versucht, die Tags wie die Originaldatei zu
kommentieren

3

Aus irgendeinem Grund hatte meine web.config 0.0.0.0 im oldversion Attribut:

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

wechseln zu 1.0.0.0 war die Lösung:

  <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

Ich habe ein MVC4-Projekt mit Visual Studio 2019 verwendet - und es stellte sich heraus, dass VS 2019 MVC 4 nicht sofort unterstützt. Sie müssen dies installieren.

Schritte:

  • Öffnen Sie das Visual Studio-Installationsprogramm (Suchen Sie in Windows nach dem Visual Studio-Installationsprogramm).
  • Klicken Sie auf einzelne Komponenten
  • Schreiben Sie "mvc" in das Suchfeld
  • Überprüfen Sie die mvc4-Box
  • Klicken Sie unten rechts auf "Ändern"

HINWEIS: Erforderlich, damit Visual Studio geschlossen wird

Geben Sie hier die Bildbeschreibung ein


2

In meinem Fall bestand das Problem darin, dass ich nach dem Upgrade des Projekts von MVC 4 auf MVC 5 eine Versionsänderung in der Ansicht / web.config verpasst habe:

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

Es hatte noch die alte Version 2.0.0.0. Nachdem die Version auf 3.0.0.0 geändert wurde, funktionierte alles genau richtig.

Aufgrund dieses Problems begann Visual Studio 2015 Community Edition jedes Mal, wenn ich eine CSHTml-Datei öffnete, mit dem Bashing der CPU (30-40% Auslastung im Leerlauf).


2

Ich hatte das gleiche Problem bei der Bereitstellung auf einem Azure App-Dienst

In meinem Fall lag es daran, dass ~ / Views / Web.config nicht im Projekt enthalten war.

Es hat in IIS Express funktioniert, aber bei der Bereitstellung in Azure wurde der gleiche Fehler angezeigt. Da es nicht in der .csproj-Datei enthalten war, wurde es nicht bereitgestellt.

Die Lösung bestand darin, sicherzustellen, dass ~ / Views / Web.config im Projekt enthalten ist.

Wenn Sie zum Lösungs-Explorer gehen und auf das Symbol "Alle Dateien anzeigen" klicken und dann "Ansichten" öffnen, wird dort möglicherweise eine nicht enthaltene Web.config-Datei angezeigt.

Fügen Sie es hinzu, veröffentlichen Sie es erneut und Bob ist Ihr Onkel.


1

Für mich war das Problem eine widersprüchliche .NET-Version in einer der Bibliotheken, die ich kürzlich importiert habe. Die von mir importierte Bibliothek wurde für 4.5.2 kompiliert und die ASP.NET MVC-Site, die ich importiert habe, in Ziel 4.5. Nach dem Neukompilieren der Bibliothek für 4.5 würde die Website komprimiert.

Es gab auch keine Kompilierungsfehler, aber das Problem wurde als "Warnung" gemeldet. Lesen Sie daher unbedingt alle Warnungen, falls vorhanden.


1

Um dies zu lösen, habe ich sichergestellt, dass ich mit NuGet und Package Manager Console auf die neueste MVC-Version aktualisiert habe.

Installationspaket Microsoft.AspNet.Mvc -Version 5.2.4

Dann auf die neueste Razor-Version aktualisiert

Installationspaket Microsoft.AspNet.Razor -Version 3.2.4

Dann habe ich alle web.config-Dateien geändert, um die Änderung widerzuspiegeln. Wie Sie unten sehen werden:

Stellen Sie in der Hauptdatei web.config sicher, dass die Version webpages: korrekt ist. Hier finden Sie es (ignorieren Sie die anderen Tasten):

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

Suchen Sie dann nach den anderen in den Assemblys aufgelisteten Versionen und vergleichen Sie die Version der Assembly mit der Version der Bibliothek, die in Ihren Projektreferenzen aufgeführt ist! Möglicherweise benötigen Sie nicht alle diese.

<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 sollte auch die "Newversion" anzeigen. Sehen Sie, wo NewVersion 5.2.4.0 steht. Überprüfen Sie aber auch alle anderen Versionen.

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

Stellen Sie dann im Abschnitt Ansichten Web.Config sicher, dass Razor die richtige Version ist:

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

Und zuletzt gibt es den Abschnitt Seiten der Views Web.Config

    <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

Wenn Sie dieses Problem wie ich an Ihrem Projekt ändern, müssen Sie Ihre web.config ändern, die sich im Ansichtsordner befindet. Schreiben Sie einfach eine neue Zeile, indem Sie eine leere Zeile eingeben oder entfernen. Speichern Sie dann Ihre web.config und erstellen Sie sie neu. Mein Problem wurde mit dieser Lösung gelöst


0

Ich habe versucht, eine Ansicht hinzuzufügen, die sich außerhalb meines Ordners "Ansichten" befindet (nur um meinen Code anders zu organisieren, denke ich), als ich dieses Problem hatte. Das Erstellen der Ansicht in Ansichten (wie üblich) löste das Problem.


0

In meinem Fall fehlte mir @ am Anfang des Foreach

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

Das ist wichtig; Ich weiß nicht, warum du herabgestimmt wurdest.
FlyingV

1
Weil es nichts mit der ursprünglichen Frage zu tun hat.
Ryan

0

In meinem Fall habe ich versehentlich die Datei web.config aus dem Ordner "Ansichten" entfernt. Ich fügte es wieder hinzu und es war in Ordnung.


-3

Ich habe das Problem gelöst, indem ich @Modelstatt nur modelbeim Drucken der Variablen verwendet habe.


-8

Sie werden wahrscheinlich eine Variable mit dem Namen im Code verwenden model.

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.