Nach einem erheblichen Refactoring in meiner MVC 4-Anwendung zeigt Razor diesen Fehler beim Debuggen von Ansichten:
Der Name 'model' existiert im aktuellen Kontext nicht.
Dies ist die fehlerhafte Codezeile:
@model ICollection<DataSourceByActive>
Ich weiß, dass die Verwendung von @model
korrekt ist.
Warum passiert dies? Wie kann ich es reparieren?
Ich denke, Sie haben die Datei web.config durcheinander gebracht, die im Ordner Views gespeichert ist.
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 kommentiert, haben alle Bereiche auch Views\web.config
-Dateien, wenn Sie Bereiche in Ihrem MVC-Projekt haben.
stellen Sie sicher, dass Sie sowohl in Ihrer Website web.config als auch in Ihrem Verzeichnis web.config
im Abschnitt appSettings
Folgendes enthalten
<add key="webpages:Version" value="2.0.0.0" />
Für MVC5 verwenden:
<add key="webpages:Version" value="3.0.0.0" />
(Und es existiert nur in der Hauptdatei Web.config.)
Folgendes habe ich getan:
Die .suo-Datei ist eine versteckte Datei im selben Ordner wie die .svn-Lösungsdatei und enthält die Visual Studio-Benutzeroptionen.
Ich hatte das gleiche Problem, ich erstellte ein neues Projekt und kopierte die web.config-Dateien, wie in der Antwort von Gupta empfohlen, aber das hat nichts für mich 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 gelöst.
Durch Ändern der folgenden Zeile in der Datei "web.config" des Ansichtordners wurde derselbe 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" />
In meinem Fall habe ich kürzlich von MVC 4 auf MVC 5 aktualisiert, was die web.config ziemlich schlecht macht. Dieser Artikel hat enorm geholfen.
Im Endeffekt müssen Sie alle Ihre Versionsnummernreferenzen in Ihrer web.config und in Views/web.config überprüfen, um sicherzustellen, dass sie auf die korrekten aktualisierten Versionen von MVC 5 verweisen.
Ich habe eine Lösung gefunden ... Wenn Sie die Rasierer-Version 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 ebenfalls geändert werden.
In meinem Fall erweist sich der folgende Code als nützlich. Fügen Sie den Code unter dem Ordner Views in die Datei Web.config ein.
<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>
Nachdem der Code aktualisiert wurde, müssen Sie die Lösung bereinigen und neu erstellen. Ich hoffe das wird dir helfen!
Der Wechsel von @model zu @Model hat die Aufgabe für mich erledigt.
@model repräsentiert den Objekttyp View Model. @Model repräsentiert das View Model-Objekt.
Keine der vorhandenen Antworten funktionierte für mich, aber ich habe herausgefunden, was hat für mich funktioniert, indem ich die .csproj
-Dateien verschiedener Projekte vergleicht. Die folgende manuelle Bearbeitung der .csproj
XML-Datei hat das Razor-Intellisense-Problem für mich gelöst, vielleicht kann dies jemandem helfen, der alle anderen Antworten ohne Erfolg versucht hat. Der Schlüssel ist, alle Instanzen von <Private>False</Private>
in den <Reference>
s zu entfernen:
<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 sie dorthin gekommen sind oder was sie genau tun. Vielleicht kann jemand, der schlauer ist als ich, diese Informationen hinzufügen. Ich war einfach glücklich, dieses Problem endlich zu lösen.
Ich hatte das gleiche Problem beim Bereitstellen 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 derselbe Fehler gemeldet. Da es nicht in der .csproj-Datei enthalten ist, wurde es nicht bereitgestellt.
Die Lösung bestand darin, sicherzustellen, dass ~/Views/Web.config im Projekt enthalten ist.
Wenn Sie zum Projektmappen-Explorer gehen und auf das Symbol "Alle Dateien anzeigen" klicken, öffnen Sie "Ansichten". Dort wird möglicherweise eine nicht eingeschlossene Datei "Web.config" angezeigt.
Fügen Sie es hinzu, veröffentlichen Sie es erneut, und Bob ist Ihr Onkel.
Aus irgendeinem Grund hatte meine web.config 0.0.0.0 im Attribut 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>
Änderung auf 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>
Für mich war das Problem eine widersprüchliche .NET-Version in einer der Bibliotheken, die ich kürzlich importiert habe. Die importierte Bibliothek wurde für 4.5.2 kompiliert und die ASP.NET MVC-Site, die ich in Ziel 4.5 importierte, wurde erstellt. Nachdem die besagte lib für 4.5 neu kompiliert worden war, würde sich die Website anpassen.
Es gab auch keine Kompilierungsfehler, aber das Problem wurde als "Warnung" gemeldet. Lesen Sie daher unbedingt alle Warnungen, falls vorhanden.
In meinem Fall bestand das Problem darin, dass ich nach einem Upgrade des Projekts von MVC 4 auf MVC 5 irgendwie eine Versionsänderung in der Views/web.config verpasst hatte:
<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 richtig.
Aufgrund dieses Problems begann Visual Studio 2015 Community Edition jedes Mal, wenn ich eine .cshtml-Datei öffne, die CPU (30-40% Auslastung im Leerlauf) zu schlagen.
wenn Sie dieses Problem ohne Änderung an Ihrem Projekt wie ich annehmen, müssen Sie Ihre web.config-Datei ändern, die sich in View Folder befindet. Geben Sie einfach eine neue Zeile mit Enter oder Entfernen einer leeren Zeile ein. Speichern Sie dann Ihre web.config und bauen Sie sie neu auf. Mein Problem wurde mit dieser Lösung gelöst
Ich habe versucht, eine Ansicht hinzuzufügen, die sich außerhalb meines Ordners "Views" befand (um den Code anders zu organisieren, schätze ich), als ich dieses Problem hatte. Durch das Erstellen der Ansicht in Views (wie nach Konvention) wurde sie gelöst.
Um dieses Problem 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 wiederzugeben. Wie Sie unten sehen werden:
Vergewissern Sie sich in der Datei web.config, dass die Version der Webseite: korrekt ist. Hier kann es gefunden werden (ignorieren Sie die anderen Schlüssel):
<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 Versionen, die in den Assemblys aufgeführt sind, und überprüfen Sie die Version der Assembly mit der Version der Bibliothek, die in Ihren Projektverweisen aufgeführt ist! Möglicherweise brauchen Sie nicht alle.
<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 "neue Version" anzeigen. Wo wird NewVersion 5.2.4.0 angezeigt? Ü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>
Vergewissern Sie sich im Abschnitt Views Web.Config, 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 Pages-Abschnitt 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>
In meinem Fall habe ich die Datei web.config versehentlich aus dem Ordner Views entfernt. Ich fügte es zurück und es war in Ordnung.
In meinem Fall fehlte @ 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>
}