Razor Views sehen System.Web.Mvc.HtmlHelper nicht

71

Ich bin gerade dabei, ein Upgrade auf MVC4 durchzuführen. Ich habe die Anweisungen unter http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253806 befolgt, aber in meinen Razor-Ansichten und -Layouts habe ich Fehler wie

  • 'System.Web.WebPages.Html.HtmlHelper' enthält keine Definition für 'BeginRouteForm' und es konnte keine Erweiterungsmethode 'BeginRouteForm' gefunden werden, die ein erstes Argument vom Typ 'System.Web.WebPages.Html.HtmlHelper' akzeptiert Fehlt eine using-Direktive oder eine Assembly-Referenz?)

Ich habe auch Fehler wie:

  • "Der Name 'Viewbag' existiert im aktuellen Kontext nicht

Wenn ich mit der Maus über @Html fahre, kann ich sehen, dass es vom Typ System.Web.WebPages.Html.HtmlHelper ist, nicht System.Web.Mvc.HtmlHelper

Ich bin mir nicht sicher, welche anderen Informationen relevant sind, aber hier bin ich:

  • Ich habe noch keine Klassenbibliotheken usw. in der SLN auf .net 4.5 aktualisiert.
  • Das Projekt wurde in VS2010 erstellt, aber ich führe die Migration in VS2012 durch
  • Das Projekt wird geöffnet und mit OK2012, .Net 4.0, MVC 3 in Ordnung ausgeführt

Alle Hinweise geschätzt.

Bearbeiten: Alle Referenzen und Dateien in web.config wurden aktualisiert auf:

  • 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

Bearbeiten (2): In meiner /views/web.config (oder /views/shared/web.config, wenn ich die unten stehende @ Pauls-Lösung versuche) im Element habe ich meinen eigenen Basistyp, der von System.Web erbt. Mvc.WebViewPage, die Referenzen in der enthaltenen Bibliothek wurden auf MVC4 aktualisiert und gehen zur Definition, um zur MVC4-DLL zu gelangen.

Hat sich in diesem Bereich an der neuen Version etwas geändert? In den Versionshinweisen konnte ich nichts Relevantes sehen.

NikolaiDante
quelle
3
Haben Sie Ihre web.configs überprüft?
Daniel A. White
Auf welche Version von WebPages verweist Ihre web.config?
Paul
Hallo, hast du dieses Problem behoben? Ich habe das gleiche Problem. Jede Hilfe wäre großartig.
Ben Cameron
Entschuldigung, ich habe es getan ... aber nicht auf eine Weise, die ich dokumentieren konnte. Ich habe ein paar Stunden lang an allen Konfigurationen herumgespielt und irgendwann fing es an zu funktionieren. Ich habe die "magische" Lösung nie genau bestimmt.
NikolaiDante
Ich habe ein ähnliches Problem, aber meine Intellisense-Fehler treten auf, wenn ich auf eine statische Klasse in demselben Projekt verweise. Der Namespace wird nicht gefunden. Irgendwelche Ideen hier?
SlashCoder

Antworten:

93

Ich bin mit einer Webanwendung auf dieses Problem gestoßen - meine .cshtmlDateien blieben in der System.Web.WebPages.WebViewPageBasisklasse hängen, als ich die benötigte System.Web.Mvc.WebViewPage.

Stellen Sie zunächst sicher, dass Ihre Datei ~ / Views / web.config korrekt ist pageBaseType. In meinem Fall habe ich eingestellt System.Web.Mvc.WebViewPage.

<configuration>
  <system.web.webPages.razor>
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <!-- ... -->
    </pages>
  </system.web.webPages.razor>
</configuration>

Dann wichtiger ist , haben einige Leute finden diese Schlüssel ist , wenn die oben bereits gut sind:

  1. Führen Sie eine Reinigung der Lösung durch
  2. Entladen Sie das Projekt mit den Problemen
  3. Löschen Sie die .userDatei, die Visual Studio neben dem Projekt generiert hat.
  4. Laden Sie das Projekt mit den Problemen neu
  5. Erstellen Sie die Lösung

Bei VS2015 wurden die Dateien .userund .slnin den .vsversteckten Ordner verschoben, der neben der .slnDatei erstellt wird. Aus den Kommentaren unten geht jedoch hervor, dass das Tool die falsche Version von MVC verwendet und das Löschen dieses Ordners das Problem nicht behebt. Meines Wissens ist keine Lösung bekannt.

Matt DeKrey
quelle
11
Ich denke, der zweite Teil ist der Schlüssel. Vielen Dank!
Carling
3
Matt - Ich habe STUNDEN damit verbracht und ENDLICH hat Ihre Lösung funktioniert. DANKESCHÖN! Das Entladen, Löschen von .user und das Neuladen haben bei mir funktioniert. Was zum Teufel ist die .user-Datei?
MokumaxCraig
2
Die .user-Dateien sind der Cache von Visual Studio für Ihre Projekteinstellungen, z. B. das Öffnen von aktuellen Fenstern usw. Nach meiner Erfahrung kann das Löschen der .user-Datei hilfreich sein, wenn ich etwas Wackeliges bemerke. Beachten Sie auch die .suo-Datei neben der .sln; es ist das gleiche, aber für die Lösungsdatei. (In alten Versionen von VS könnte diese Datei beschädigt werden und beispielsweise Ihre Intelligenz beschädigen ...)
Matt DeKrey
1
Schade :( Dies funktionierte nicht für die gleichen Symptome in VS2015
Serj Sagan
9
Ich stimme @SerjSagan zu - dies behebt diese Symptome in VS2015 nicht. Der Fehler, den ich erhalte , befindet sich '_Page_Views_Home_Index_cshtml' does not contain a definition for 'ViewBag'im Editor und The type or namespace name 'AspNet' does not exist in the namespace 'Microsoft'in der Fehlerliste (CS0234). Ich verwende MVC 5 und alles begann, als ich von VS2013 auf VS2015 aktualisiert habe. Wenn jemand Hilfe hat, wäre er sehr dankbar, da mich das langsam nervt! Grrr!
BWHazel
27

Ich hatte das gleiche Problem beim Aktualisieren auf MVC 5 und es wurde durch Aktualisieren der Datei web.config im Ordner "Ansichten" behoben.

<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.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.Optimization"/>
    <add namespace="System.Web.Routing" />
  </namespaces>
</pages>

Der Host -> factoryType wurde auf Version: 4.0.0.0 gesetzt. Ich hoffe, dies hilft jedem.

user3141889
quelle
1
Ja Ja Ja. Es half! Vielen Dank!
Agarcian
1
Vielen Dank. Ich habe buchstäblich mehr als 20 verschiedene Lösungen ausprobiert. Ihre ist die erste, die funktioniert. Sehr geschätzt.
Nick
9

Ich habe alle Lösungen hier ausprobiert, aber keine davon hat für mich funktioniert. Auch hier läuft meine Website einwandfrei, aber ich habe kein Intellisense und erhalte rote Wellenlinien unter vielen Dingen in meinen Ansichten, die Visual Studio nicht erkennt. Eine davon ist Html.BeginForm(), sowie alles, was damit zu tun hat ViewBag.

Ich arbeite mit einem neuen MVC 5-Projekt. Nachdem ich stundenlang die Zeilen von web.config verglichen hatte, fand ich endlich heraus, was das Problem für mich behoben hatte.

Meine web.config in meinem Stammverzeichnis hatte die folgende Zeile:

<system.web>
  <compilation debug="true" targetFramework="4.5" />

  <!-- ... -->
</system.web>

Ich habe mit einem früheren Projekt verglichen, bei dem MVC 5 nicht verwendet wurde, und über einen Block kopiert, von dem ich festgestellt habe, dass er in dem neuen fehlte.

<system.web>
  <compilation debug="true" targetFramework="4.5">
    <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.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add assembly="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </assemblies>
  </compilation>

  <!-- ... -->
</system.web>

Ich habe den obigen Block in die web.config meines neuen Projekts im Stammverzeichnis kopiert und die Versionen so geändert, dass sie mit den Nummern für jede in meinen Projektreferenzen gefundene Baugruppe übereinstimmen (durch Klicken mit der rechten Maustaste auf jede erwähnte Referenz und Auswahl von "Eigenschaften" wird "Version" angegeben am unteren Rand des Eigenschaftenfensters für die ausgewählte Referenz).

Nachdem die obige Umsetzung habe ich jetzt Intellisense und keine unbekannten roten Linien unter Dinge wie bekommen Html.BeginForm, ViewBag.Titleetc.

David Gunderson
quelle
Danke dafür! Ich bin mir nicht sicher, aber dies ist möglicherweise nur in der Datei /Views/Web.Config erforderlich, aber ich habe es in das Stammverzeichnis gestellt und es hat den Trick gemacht. Prost.
Serexx
Ich habe jede Referenz gegen die tatsächliche DLL-Version im Eigenschaftenfenster überarbeitet und das Problem gefunden. Danke Kumpel, dass du mich in die richtige Richtung gelenkt hast.
Korayem
Vielen Dank dafür! Ich hatte das gleiche Problem wie Sie und dies hat es behoben :)
Köcher
6

Ich hatte ein sauberes Projekt ausgeführt und alles installiert oder neu installiert und bekam immer noch viele Intellisense-Fehler, obwohl meine Site kompiliert wurde und einwandfrei lief. Intellisense hat endlich für mich funktioniert, als ich die Versionsnummern in meiner Datei web.config im Ordner Ansichten geändert habe. In meinem Fall codiere ich ein Modul in Orchard, das in einem MVC-Bereich ausgeführt wird, aber ich denke, dies wird jedem helfen, der die neueste Version von MVC verwendet. Hier ist meine web.config aus dem Ordner "Ansichten"

    <?xml version="1.0"?>
    <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>

      <system.web.webPages.razor>
        <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <pages pageBaseType="Orchard.Mvc.ViewEngines.Razor.WebViewPage">
          <namespaces>
            <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.Linq" />
            <add namespace="System.Collections.Generic" />
          </namespaces>
        </pages>
      </system.web.webPages.razor>

      <system.web>

        <!--
            Enabling request validation in view pages would cause validation to occur
            after the input has already been processed by the controller. By default
            MVC performs request validation before a controller processes the input.
            To change this behavior apply the ValidateInputAttribute to a
            controller or action.
        -->
        <pages
            validateRequest="false"
            pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
            pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
            userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
          <controls>
            <add assembly="System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" 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>
user2570487
quelle
Für mich war es ein Upgrade der Unterelemente <configSections> von 2.0 auf Version 3.0. Vielen Dank!
Jakob Hviid
Das ist es Leute! Achten Sie auf die Versionsnummern in Ihrer Views / Web.config. Sie müssen mit den Versionen der referenzierten Assemblys übereinstimmen.
Dimskiy
4

Sie müssen kopieren Views/Web.configzu /Shared. Dadurch wird Razor angewiesen, den MVC-Basistyp & Parser zu verwenden. Weitere Informationen finden Sie hier: http://blog.slaks.net/2011/02/dissecting-razor-part-3-razor-and-mvc.html

Paul
quelle
Danke, aber keine Freude. Ich habe in Bearbeiten (2) weitere Informationen zu dieser Frage bereitgestellt.
NikolaiDante
2
Das beseitigte die Warnmeldungen, brach aber die Website total! Wir entwickeln hier viel MVC und ich habe diese Dateien noch nie im Ordner / shared gesehen.
Jgreenst
3

Ich habe mich nach dem Upgrade von Visual Studio 2013auf mit diesem Problem befasst. Nachdem ich die Visual Studio 2015meisten Ratschläge in diesem und anderen ähnlichen SO-Posts ausprobiert hatte, fand ich schließlich das Problem. Der erste Teil des Fixes bestand darin, alle meine NuGetInhalte auf die neueste Version zu aktualisieren (möglicherweise müssen Sie dies tun, VS13wenn der NugetFehler auftritt), nachdem ich die in der Liste aufgeführten Versionen nach Bedarf reparieren musste Ansichten Web.config . Das beinhaltet:

  1. Korrigieren Sie die MVCVersionen und ihre untergeordneten Bibliotheken auf die neue Version (erweitern Sie den ReferencesMausklick und klicken Sie Sytem.Web.MVCdann Propertiesauf, um Ihre Version zu erhalten).
  2. Korrigieren Sie die RazorVersion.

Meins sah so aus:

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

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.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.Optimization"/>
        <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=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
      pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
      userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=5.2.3.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>
Serj Sagan
quelle
Versuchte alles ... leider keine Hilfe ..! :(
Der Pate
3

Update für Visual Studio 2017-Benutzer:

Wenn Sie gerade auf Visual Studio 2017 migriert haben und Ihr Projekt MVC4 ist, stellen Sie sicher, dass Sie zum VS2017-Installationsprogramm zurückkehren und die Option MVC4 im Abschnitt "ASP.NET und Webentwicklung" aktivieren. Es ist eine optionale Komponente und nicht standardmäßig aktiviert.

Dies löste mein Problem

Mike Smith
quelle
Das war die Lösung für mich. Vielen Dank.
Andy Jones
2

In der Vertragswelt verwende ich häufig Maschinen, die ältere Bilder verwenden. Nachdem ich alles oben Genannte ausprobiert hatte, entschied ich mich, mein VS 2013 auf die neueste Version (Update 4) zu aktualisieren. Nach 90 Minuten und einem Neustart funktionieren die Referenzen jetzt einwandfrei! Hoffe das hilft!

RichieMN
quelle
1
Ja, für mich war auch Update 5 (ich habe zuletzt installiert) für Visual Studio 2013 hilfreich.
paweln66
2

Nachdem ich alles vergeblich ausprobiert hatte, stellte ich fest, dass es in meinem Fall aufgrund eines falschen Attributwerts in der csproj-Datei von Web Project nicht funktionierte. Wenn ich ToolsVersion auf 14 ändere , was meiner aktuellen IDE-Version (dh Visual Studio 2015) entspricht, hat alles wie ein Zauber funktioniert:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition=
  .....
Korayem
quelle
2

Für diejenigen unter Ihnen, die nach der Migration eines Projekts von VS 2013 auf VS 2015 darunter leiden, konnte ich dieses Problem beheben, indem ich das ASP.NET-Tool-Update von https://visualstudiogallery.msdn.microsoft.com/c94a02e9-f2e9- installierte 4bad-a952-a63a967e3935 / file / 77371/6 / AspNet5.ENU.RC1_Update1.exe? SRC = VSIDE & UPDATE = TRUE .

Chipples
quelle
Dies führte mich auf den richtigen Weg. Mein VS 2105 benötigte noch das Visual Studio Update 1. Nach dem Update war alles in Ordnung.
Jrob
Das ist interessant, Update 1 hat es für mich nicht behoben, aber das Web-Tool-Update hat es getan.
Chipples
Arbeitete hier aber ich musste auch alle Benutzerdaten löschen. Schöne Lösung.
Realität
1

Nur um die Antwort von Matt DeKrey zu erweitern, konnte das Problem durch Löschen der Datei csproj.user (ohne dass Lösungen neu erstellt werden müssen) behoben werden.

Der einzige Nebeneffekt, den ich hatte, war, dass ich die Startaktion auf die Verwendung einer bestimmten Seite zurücksetzen musste.

Harvyk
quelle
1

Ich habe den folgenden Artikel über MSDN verwendet, um dieses Problem zu lösen (in diesem Fall von MVC 4 bis MVC 5).

https://docs.microsoft.com/en-us/aspnet/mvc/overview/releases/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc- 5-and-Web-API-2

Hauptauszüge aus dem Artikel sind:

Main Web.config (Nicht die im Ordner "Ansichten")

Aktualisieren Sie im Laufzeitblock System.Web.Mvc auf 5.0.0.0, System.Web.Helpers auf 3.0.0.0 und System.Web.WebPages auf 3.0.0.0

<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.Mvc" publicKeyToken="31bf3856ad364e35" />
  <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.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>

Suchen Sie dann nach dem Block für die Einstellungen und aktualisieren Sie die Webseiten: Versionswert auf 3.0.0.0

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

Ansichten Web.config

Aktualisieren Sie den Host factoryType-Block auf System.Web.Mvc auf 5.0.0.0

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

Aktualisieren Sie dann unter dem Seitenblock alle Verweise auf System.Web.Mvc auf 5.0.0.0

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

Und schließlich unter dem Konfigurationsblock aktualisieren Sie die System.Web-Verweise auf 3.0.0.0

<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>
Jflip
quelle
1

Vor kurzem habe ich das gleiche Problem und so habe ich es behoben: In Visual Studio mit geöffnetem Projekt, Gehe zu:

  1. Tools -> NuGet Package Manager -> NuGet Packages for Solution verwalten .
  2. Wählen Sie im geöffneten Fenster Updates aus . Klicken Sie dann auf Alle aktualisieren .

Es wird geladen, was in Ihrem Projekt fehlt, und alle sollten wieder auf dem richtigen Weg sein.

Donald Mkhomole
quelle
0
*<system.web>
<compilation debug="true" targetFramework="4.5">
    <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.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </assemblies>
</compilation>*

Diese Konfiguration fehlt, fügen Sie sie hinzu und legen Sie die entsprechende Version der Assemblys fest

ALZ
quelle
0

Als Variation eines Themas hätte ich schwören können, dass meine Views \ Web.config korrekt war:

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

Aber ich musste tatsächlich darauf verweisen Version=4.0.0.1, nicht Version=4.0.0.0wegen des Sicherheitsupdates, das vor einiger Zeit veröffentlicht wurde.

Nicholas Piasecki
quelle
0

Für mich war es ein dummer Bereitstellungsfehler: Webprojekte können mehr als eine web.config haben. Es funktionierte auf dem Computer des Entwicklers und nicht in der Produktion, aber wir haben nicht bemerkt, dass das Bereitstellungsskript nur die Web.configDatei im Stammverzeichnis abgerufen und die Web.configDatei nicht in den ViewsOrdner kopiert hat .

knocte
quelle
0

Ich bin auch auf dieses spezielle Problem gestoßen. Keine (oder falsche) Intellisense-Anzeige, wenn versucht wird, Rasiermesser-Tags zu verwenden. Mein spezielles Problem war VS2015, der sich darüber beschwerte, dass Html.BeginForm im aktuellen Kontext nicht vorhanden war.

In meinem MVC-Projekt sind Bereiche eingerichtet, und es ist mir gelungen, die Fehlerursache auf die Datei web.config für einen bestimmten Bereich und nicht auf die globale Datei web.config zu beschränken.

Es stellte sich heraus, dass die Ursache für dieses Problem für mich darin bestand, dass ich der web.config einen SQL connectionString für den Bereich hinzugefügt hatte, der nicht funktionierte. Dies (ich nehme an) verursachte einen Analysefehler, das Projekt wurde jedoch korrekt kompiliert .

Durch das Verschieben des connectionString in die globale web.config wurde das Problem behoben. Hoffentlich kann dies für andere von Nutzen sein.

0xFF
quelle
0

Meine Situation trat erst auf, nachdem ich eine benutzerdefinierte Klasse namens erstellt hatte BaseViewPage, die die WebViewPageKlasse überschrieb . Ich habe zunächst die folgenden meine Haupt Web.confg Datei:

<pages pageBaseType="ZooResourceLibrary.Web.Support.BaseViewPage">

Und dies auch für die Ansicht Ordner Datei web.config:

<pages pageBaseType="ZooResourceLibrary.Web.Support.BaseViewPage">

Ich habe viele der anderen Antworten ausprobiert und keine hat den Trick gemacht, während ich trotzdem meine BaseViewPageKlasse behalten konnte . So wie ich es fixiert war , das entfernen pageBaseTypeAttribut aus der Haupt Datei Web.config nur. Behalten Sie es in der Ansicht web.config.

Grandizer
quelle
0

In SO stieß ich auf mehrere Antworten und am Ende stellte ich fest, dass mein Fehler darin bestand, dass ich "Html.TextBoxFor" falsch geschrieben hatte. In meinem Fall schrieb ich "Html.TextboxFor". Ich habe das B in TextBoxFor nicht in Großbuchstaben geschrieben. Behoben das und voilà. Problem gelöst. Ich hoffe das hilft jemandem.

Amadeus Sánchez
quelle
0

Richtig, ich habe versucht, dieses Problem für einige Zeit zu beheben. Ich habe alle Lösungen in den verschiedenen Stack Overflow-Themen dazu verwendet und keine schien zu funktionieren.

Ich habe das Problem heute Morgen behoben. Nachdem Sie die Datei web.config sowohl für das Projekt als auch für die Ansichten korrigiert haben, stellen Sie sicher, dass alle DLL-Versionen mit denen im Referenzordner übereinstimmen. Sie müssen das Projekt entladen, die .csproj-Datei bearbeiten und anschließend alle DLL-Versionen in dieser Datei aktualisieren.

System.Web.Helpers
System.Web.Mvc
System.Web.WebPages

Hoffe das hilft, da ich dieses Problem endlich behoben habe! Keine roten, schnörkellosen Linien mehr.

Dies hat auch das Problem mit dem Kontextmenü behoben, bei dem ich nicht die Möglichkeit hatte, einen Controller, eine Ansicht usw. hinzuzufügen.

Pavan Dhariwal
quelle
-1

Für mich bestand die Lösung darin, Folgendes zu ändern:

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