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

73

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

Alles andere (Controller, Laden der Plugin-Assembly usw.) scheint in Ordnung zu sein. Es ist mir jedoch nicht möglich, eingebettete Razor-Ansichten ordnungsgemäß zu verwenden. Wenn ich versuche, zur "HelloWorld / Index" zu navigieren, wird folgende Fehlermeldung angezeigt:

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

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

Bei Bedarf kann ich den vollständigen Stack-Trace einbinden.

Kann mir jemand raten, was ich falsch machen könnte?

Nasir
quelle

Antworten:

158

Sie können den folgenden Blog-Beitrag lesen, der besser an Razor angepasst ist.

Um Ihre Frage zu beantworten: Da Sie Ihre Ansichten jetzt von einem nicht standardmäßigen Speicherort aus bereitstellen, ist die ~/Views/web.configDatei nicht mehr gültig 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 ...
Darin Dimitrov
quelle
1
Vielen Dank für beide Informationen. Ich werde den Blog überprüfen, den Sie erwähnt haben.
Nasir
12
Ich konnte die web.config von ~ / Views an meinen alternativen Speicherort kopieren, um mein Problem damit zu lösen. Vielen Dank.
Joelnet
1
@Darin Dimitrov Ich habe ein ähnliches Problem. Wenn ich versuche , das Hinzufügen @inheritsmir einen Fehler bin immer sagen , dass ich nicht verwenden kann , @inheritsund @modelzur gleichen Zeit. Können Sie dabei helfen? BEARBEITEN. Ich benutze mvc4
gumenimeda
2
Wenn Sie Probleme haben, die Lösung in @ joelnets Kommentar zum Laufen zu bringen, versuchen Sie, das Projekt zu bereinigen und neu zu erstellen.
Paul d'Aoust
5
@DarinDimitrov: Ich habe eine Beispielanwendung erstellt und im freigegebenen Ordner eine View sampleView.html zum Senden von E-Mails erstellt. Ich habe den obigen Absturz erhalten und den obigen Code verwendet. Jetzt heißt es Fehler. Das Schlüsselwort "erbt" ist nicht zulässig, wenn ein Schlüsselwort "Modell" verwendet wird.
Imad Alazani
6

Hinweis: Ich hatte ein äußerst ähnliches Problem und musste schließlich feststellen, dass ich der einzige Entwickler war, dessen Lösung mit MVC 4.0.0.0 verknüpft war.

Alle anderen hatten 3.0.0.0 richtig referenziert und bauten / liefen ohne Fehler.

TL; DR Stellen Sie sicher, dass Ihre Referenzen mit denen der übrigen Entwicklungsgruppe übereinstimmen.

nolsen311
quelle
1

Ich hatte das gleiche Problem, weil ich den Paketordner, der die Rasierbibliotheken enthält, nicht festgeschrieben habe. Dann habe ich das Paket hinzugefügt, es hat funktioniert, aber beim Wiederaufbau ist es kaputt gegangen. Dann habe ich die automatische Ausführung von Nuget beim Erstellen deaktiviert und jetzt funktioniert es einwandfrei. In meinem Fall hat Nuget die Dinge durcheinander gebracht.

max
quelle
0

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 <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">Abschnitt zu entfernen .

Fr3gU
quelle
0

Ich möchte meinen Schmerz teilen. Die Website funktionierte lokal einwandfrei. Als ich sie jedoch auf dem IIS des Kunden veröffentlichte, wurde dieser Fehler ausgelöst. 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 sie auf meinem Windows-Computer zu beheben.

Wenn Sie im Dialogfeld "Inkonsistente Zeilenenden" auf "Ja" klicken und die Ansicht "logon.cshtml" veröffentlichen, wurde dies für mich behoben.

Noobie3001
quelle
0

Ich habe diesen Fehler erhalten, als ich versucht habe Views, einem Web-API-Projekt ein MVC-Gerüst (insbesondere den Ordner) hinzuzufügen . Darin Dimitrovs Antwort lautet:

Es gibt keine ~/Views/web.configzutreffende Datei mehr und Sie können den Basistyp für Ihre Rasiereransichten angeben

Und in Kommentaren zu dieser Antwort sagte Joelnet :

Ich konnte die web.config von ~ / Views an 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 zum Laufen zu bringen, versuchen Sie, das Projekt zu bereinigen und neu zu erstellen.

Diese Hinweise halfen mir, die Lösung zu finden.

Zuerst habe ich das Web.configaus dem ViewsOrdner eines anderen Projekts in derselben Lösung in meinen neuen ViewsOrdner kopiert . Ich habe das Haupt- namespaceTag umbenannt, damit es mit dem neuen Projekt übereinstimmt, und nachdem ein Fehler aufgetreten ist <add namespace="..." />, habe ich ein anderes entfernt , das ich nicht brauchte. Ich habe dann einen Build ausgelöst (nur ein normaler Build, ich musste nicht bereinigen und neu erstellen) und konnte meine neue Ansicht ohne Fehler laden.

Scott Weldon
quelle
-1

Installieren Sie das Paket: Install-Package Microsoft.AspNet.WebPages

Kelly Soares
quelle
1
Ich glaube nicht, dass das Microsoft.AspNet.WebPagesPaket vor 4 Jahren für ASP.NET MV3 verfügbar war.
Nasir
2
@Nasir, ich frage wirklich, ist es bei StackOverflow vorzuziehen, dass sich die Antwort auf die Technologie bezieht, die zum Zeitpunkt der Veröffentlichung verfügbar war, auch wenn das Problem bis heute besteht?
Jared Beach
1
Meine persönliche Meinung ist, dass Sie, wenn Sie eine alte Frage beantworten, zumindest anerkennen, dass die Antwort möglicherweise nicht relevant war, als die Frage ursprünglich gestellt wurde. Andernfalls wird entweder eine nicht informierte Antwort angezeigt oder der Benutzer hat die Details nicht beachtet (Datum ist eines dieser Details).
Nasir