wake-up-neo.com

Die Ansicht muss von WebViewPage oder WebViewPage <TModel> abgeleitet sein

Ich folge Justin Slatterys Tutorial für Plugin-Architektur und versuche, es für Razor anstelle von WebForm-Ansichten anzupassen.

Alles andere (Controller, Plugin Assembly Loading usw.) scheint in Ordnung zu sein. Ich kann jedoch keine eingebetteten Razor-Ansichten erhalten, um richtig zu funktionieren. Wenn ich versuche, zum "HelloWorld/Index" zu navigieren, erhalte ich die folgende Fehlermeldung:

The view at '~/Plugins/MyProjectPlugin.dll/MyProjectPlugin.Views.HelloWorld.Index.cshtml' must derive from WebViewPage or WebViewPage<TModel>.

Die Ausnahme wird von System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +262 ausgelöst.

Bei Bedarf kann ich die vollständige Stapelverfolgung einschließen.

Kann jemand raten, was ich falsch mache? 

72
Nasir

Sie können den folgenden Blogbeitrag auschecken, der eher an Razor angepasst ist. 

Aber um Ihre Frage zu beantworten, da Sie jetzt Ihre Ansichten von einem nicht standardmäßigen Ort aus bereitstellen, gibt es nicht mehr die ~/Views/web.config-Datei, die gilt, und Sie können den Basistyp für Ihre Rasiereransichten angeben. Daher müssen Sie möglicherweise oben in jeder Rasiereransicht Folgendes hinzufügen:

@inherits System.Web.Mvc.WebViewPage
@model ...
155
Darin Dimitrov

Hinweis: Ich hatte ein sehr ähnliches Problem und musste endlich feststellen, dass ich der einzige Entwickler war, der mit MVC 4.0.0.0 in seiner Lösung verlinkt war.

Alle anderen hatten 3.0.0.0 ordnungsgemäß referenziert und liefen fehlerfrei.

TL; DR Stellen Sie sicher, dass Ihre Referenzen mit dem Rest Ihrer Entwicklungsgruppe übereinstimmen.

6
nolsen311

Ich hatte dasselbe Problem, weil ich den Paketordner nicht festgeschrieben hatte, der die Rasierklassenbibliotheken enthält. Dann fügte ich das Paket hinzu, es funktionierte, aber beim Umbau ging es kaputt. Dann habe ich den Nuget-Automatiklauf beim Build abgestellt, und jetzt funktioniert alles gut ... In meinem Fall hat Nuget alles durcheinander gebracht.

1
max

Ich habe diese Fehlermeldung erhalten, als ich versuchte, einem Web-API-Projekt MVC-Gerüste (insbesondere den Ordner Views) hinzuzufügen. Darin Dimitrovs Antwort sagt:

es gibt nicht mehr die ~/Views/web.config-Datei, die gilt, und Sie können den Basistyp für Ihre Rasiereransichten angeben

Und in Kommentaren zu dieser Antwort sagte joelnet :

Ich konnte die web.config aus ~/Views in meinen alternativen Speicherort kopieren, um mein Problem damit zu lösen.

und Paul d'Aoust sagte :

Wenn Sie Probleme haben, die Lösung in @ joelnets Kommentar zu aktivieren, versuchen Sie, das Projekt zu reinigen und neu zu erstellen.

Diese Hinweise halfen mir, die Lösung herauszufinden.

Zuerst habe ich den Web.config aus dem Views-Ordner eines anderen Projekts in derselben Projektmappe in meinen neuen Views-Ordner kopiert. Ich benannte das Hauptvariable namespace in das neue Projekt um, und nachdem ich einen Fehler erhalten hatte, wurde ein anderer <add namespace="..." /> entfernt, den ich nicht brauchte. Ich habe dann einen Build ausgelöst (nur ein normaler Build, ich musste nicht bereinigen und neu erstellen), und ich konnte meine neue Ansicht ohne Fehler laden.

0
Scott Weldon

Ich möchte meine Schmerzen mitteilen. Die Website funktionierte lokal einwandfrei. Als ich sie jedoch im IIS des Kunden veröffentlichte, wurde dieser Fehler ausgegeben. Alle web.config-Dateien (root und/Views) stimmten perfekt mit einer Arbeitskopie der Site überein.

Eine der Ansichten (logon.cshtml) hatte inkonsistente Zeilenenden und ich habe nicht auf Ja geklickt, um das Problem auf meinem Windows-Computer zu beheben.

Das Klicken auf Ja im inkonsistenten Dialogfeld für die Zeilenenden und das Veröffentlichen der Ansicht logon.cshtml hat das Problem behoben.

0
Noobie3001

Ich habe diesen Fehler heute beim Aktualisieren eines alten MVC3-Projekts auf Version 4 erhalten und für mich bestand die Lösung darin, das Attribut appliesTo="v2.0.50727" im Abschnitt <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1"> zu entfernen.

0
Fr3gU