it-swarm.com.de

Rasiermesseransicht "Der Name 'Modell' ist im aktuellen Kontext nicht vorhanden"

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?

149
Kehlan Krumme

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.

205
Anirudha Gupta

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

83
Alex

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.

35

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.

24
Tarek Shawadfy

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" />
11
vinayak hegde

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.

http://www.asp.net/mvc/overview/releases/wie-nach-upgrade-an-aspnet-mvc-4-und-web-api-project-to-aspnet-mvc-5-und- Web-API-2

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.

10
Justin Skiles

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.

6
ddagsan

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!

5
Prach

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.

5
eaglei22

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.

4
funkwurm

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.

1
gburton

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

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.

1
Big Gunz

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.

1

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

0

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.

0

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>
0
Keith Aymar

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.

0
Reza

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