Ich bin neu im C # MVC-Projekttyp und als ich ein leeres C # MVC-Projekt erstellte, bemerkte ich den folgenden Fehler:
%Vor%Ich habe die Datei "Index.cshtml" unter dem Ordner "Ansichten". Warum wird die MVC-Engine nicht direkt unter dem Ordner "Views" angezeigt? Wie löse ich dieses Problem?
Meine RouteConfig.cs-Inhalte sind:
%Vor%Mein Controller Inhalt:
%Vor%Ich hatte dieses Problem einige Male zuvor und es kann eine der anderen Antworten sein, aber es kann auch die Build-Aktion sein, die das Problem verursacht.
Wenn Sie mit der rechten Maustaste auf die .cshtml / .vbhtml-Datei klicken, für die Sie ein Problem haben, wählen Sie Eigenschaften, und legen Sie im Eigenschaftenfenster die Build-Aktion auf Inhalt fest, dann kann dies eine Lösung sein zu deinem Problem.
Die MVC-Engine sucht unter Shared oder unter dem Ordner, der wie das Präfix Ihrer Controller-Klasse benannt ist, nach einer Ansicht. Wenn Sie also ABCController
haben, müssen Sie Ihre Index.cshtml
Sicht unter dem Ordner Views/ABC
haben.
PS: In deinem Beispiel hast du ein Suffix für deinen Controllernamen ( ControllerName
), ich denke nicht, dass es eine gute Übung ist, nenne immer deine Controller [Name]Controller
Wenn eine Ansicht zurückgegeben wird, erwartet sie, dass eine verknüpfte .cshtml
-Datei in derselben Ansichtsordnerstruktur wie das Controller-Layout für diesen Bereich ist (wenn keine Bereiche verwendet werden, gibt es nur 1 Ansichtsordner und 1 Controller) Mappe). Der Name des Controllers ist der Ordnername im Ordner views und der Name des Actionresult wird der erwartete Name der .cshtml-Datei.
Glücklicherweise gibt es eine einfache Möglichkeit, die Situation zu beheben, in der die Ansichtsdatei fehlt. Klicken Sie mit der rechten Maustaste auf Index
für Ihr Aktionsergebnis und wählen Sie dann Ansicht hinzufügen. Klicken Sie auf OK und es wird Index.cshtml
für Sie innerhalb des korrekten Ordners erstellt. Wenn Sie nun das Projekt ausführen und zu Index
navigieren, sehen Sie das.
Wenn Sie den Code manuell für eine Instanz von IIS bereitgestellt haben, stellen Sie sicher, dass die App Pool-Identität, die für diese Anwendung in IIS verwendet wird, über Rechte für die Ordner in der Anwendung verfügt.
Eine gute Möglichkeit zu diagnostizieren, ob etwas mit Ihrem Code nicht stimmt oder etwas mit den IIS-Einstellungen nicht stimmt, ist die Ausführung im VS 201X-Debugger. Wenn es dort ausgeführt wird, aber nicht direkt unter IIS ausgeführt wird, besteht eine gute Chance, dass die App Pool Identity-Sicherheit aufgebockt ist.
Sie haben möglicherweise alte / fehlerhafte ASP.Net-Assemblies in Ihrem Build.
Wenn Sie sicher gemacht haben, haben Sie Ihren Controller, Namespace und View-Namen an der richtigen Stelle, und es besteht eine gute Chance, dass Ihre MVC / ASP-Assembly Probleme mit der aktuellen Mono-Umgebung hat.
Wenn Sie versucht haben, alle .Net-Assemblys zu kopieren, die Sie finden und in Ihre Bin ablegen können, besteht eine gute Chance, dass Mono oder seine Konfiguration nicht korrekt miteinander verschmelzen - und Sie müssen das nicht mehr tun . Ich hatte dieses Problem, als ich eine Maschine auf den neuesten Mono Build upte. Ich habe diese Assemblys aus meinem Bin gelöscht und NuGet die neuesten Assemblys im Ordner Mono MVC Packages geladen.
Das erste, was Sie sehen werden, ist:
Dies wird diese Probleme lösen.
Ich hatte ein virtuelles Verzeichnis, das nicht korrekt auf das aktuelle Verzeichnis verweist.
(Unter Windows) Ich habe dies behoben, indem ich in IIS (Internet Information Services Manager) gegangen bin und mit der rechten Maustaste auf das virtuelle Verzeichnis geklickt habe, das nicht korrekt referenziert wurde (In Ihrem Fall Views
).
Virtuelle Verzeichnisse haben dieses kleine Symbol neben ihnen:
Klicken Sie mit der rechten Maustaste und wählen Sie Manage Virtual Directory
& gt; %Code%. Stellen Sie sicher, dass der physische Pfad mit dem übereinstimmt, wo er Ihrer Meinung nach gehen sollte:
Dies wird nicht für alle Fälle gelten, aber es ist eine mögliche Übereinstimmung für einige Fälle.
Ich weiß, dass es sich um einen alten Post handelt, aber ich bin in dieselbe Situation geraten, die auf Ubuuntu 16.04 und Mono 4.2.1 lief und nichts davon half. Ich fing an, in andere Dinge zu graben und nach einer Woche fand ich heraus, dass aus irgendeinem Grund Microsoft.Web.WebPages.OAuth.dll diesen Fehler verursachte. nachdem ich diese dll gelöscht und alle refrens entfernt habe (ich benutze sowieso nicht die open auth), fing alles sofort an zu arbeiten, sogar mit einer einfachen Mitgliedschaft bei MySQL. Also wollte ich das hier posten, falls jemand anders in derselben Situation auf Mono und Linux stößt, weil dies in Google auftaucht.
Ein nützlicher Diagnoseschritt besteht darin, mit der rechten Maustaste in die Aktion des Controllers zu klicken und "Gehe zu Ansicht" auszuwählen.
Wenn Visual Studio die Ansicht finden kann, befindet sie sich wahrscheinlich im richtigen Ordner. Überprüfen Sie Ihre URL also erneut. Wenn Sie beispielsweise einen Bereich verwenden, sollte der Bereichsname in der URL:
stehen %Vor%Tags und Links c# razor asp.net-mvc-4