Ich habe das folgende Layout für mein MVC-Projekt:
- / Controller
- /Demo
- / Demo / DemoArea1Controller
- / Demo / DemoArea2Controller
- etc...
- / Ansichten
- /Demo
- /Demo/DemoArea1/Index.aspx
- /Demo/DemoArea2/Index.aspx
Wenn ich dies jedoch habe für DemoArea1Controller
:
public class DemoArea1Controller : Controller
{
public ActionResult Index()
{
return View();
}
}
Ich erhalte den Fehler "Der Ansichtsindex oder sein Master konnte nicht gefunden werden" mit den üblichen Suchpositionen.
Wie kann ich festlegen, dass Controller in der Namespace-Suche "Demo" im Unterordner der Ansicht "Demo" angezeigt werden?
asp.net-mvc
views
Daniel Schaffer
quelle
quelle
Antworten:
Sie können die WebFormViewEngine einfach erweitern, um alle Speicherorte anzugeben, an denen Sie suchen möchten:
Stellen Sie sicher, dass Sie daran denken, die View Engine zu registrieren, indem Sie die Application_Start-Methode in Ihrer Global.asax.cs ändern
quelle
Jetzt können Sie in MVC 6 die
IViewLocationExpander
Schnittstelle implementieren , ohne mit View Engines herumzuspielen:Wo
{0}
ist der Name der Zielansicht,{1}
- Name des Controllers und{2}
- Name des Bereichs.Sie können Ihre eigene Liste von Speicherorten zurückgeben, mit default
viewLocations
(.Union(viewLocations)
) zusammenführen oder einfach ändern (viewLocations.Select(path => "/AnotherPath" + path)
).Fügen Sie der
ConfigureServices
Methode in derStartup.cs
Datei die folgenden Zeilen hinzu, um Ihren benutzerdefinierten Ansichtsstandort-Expander in MVC zu registrieren :quelle
Es gibt tatsächlich eine viel einfachere Methode, als die Pfade in Ihren Konstruktor fest zu codieren. Unten finden Sie ein Beispiel für die Erweiterung der Razor-Engine, um neue Pfade hinzuzufügen. Ich bin mir nicht ganz sicher, ob die hier hinzugefügten Pfade zwischengespeichert werden:
Und Ihre Global.asax.cs
Beachten Sie Folgendes: Ihr benutzerdefinierter Speicherort benötigt die Datei ViewStart.cshtml im Stammverzeichnis.
quelle
Wenn Sie nur neue Pfade hinzufügen möchten, können Sie die Standard-Ansichtsmodule hinzufügen und einige Codezeilen sparen:
Gleiches gilt für
WebFormEngine
quelle
Anstatt die RazorViewEngine in Unterklassen zu unterteilen oder sie vollständig zu ersetzen, können Sie einfach die PartialViewLocationFormats-Eigenschaft der vorhandenen RazorViewEngine ändern. Dieser Code geht in Application_Start:
quelle
Zuletzt habe ich überprüft, dass Sie Ihre eigene ViewEngine erstellen müssen. Ich weiß nicht, ob sie es in RC1 einfacher gemacht haben.
Der grundlegende Ansatz, den ich vor dem ersten RC verwendet habe, bestand darin, in meiner eigenen ViewEngine den Namespace des Controllers aufzuteilen und nach Ordnern zu suchen, die den Teilen entsprechen.
BEARBEITEN:
Ging zurück und fand den Code. Hier ist die allgemeine Idee.
quelle
Versuchen Sie so etwas:
quelle
Hinweis: Für ASP.NET MVC 2 verfügen sie über zusätzliche Standortpfade, die Sie für Ansichten in "Bereiche" festlegen müssen.
Das Erstellen einer Ansichts-Engine für einen Bereich wird in Phils Blog beschrieben .
Hinweis: Dies ist für die Vorschau-Version 1 vorgesehen und kann sich ändern.
quelle
Bei den meisten Antworten hier löschen Sie die vorhandenen Standorte, indem Sie anrufen,
ViewEngines.Engines.Clear()
und fügen Sie sie dann wieder hinzu. Dies ist nicht erforderlich.Wir können die neuen Standorte einfach zu den vorhandenen hinzufügen, wie unten gezeigt:
Jetzt können Sie Ihr Projekt so konfigurieren, dass es
RazorViewEngine
in Global.asax Folgendes verwendet:Weitere Informationen finden Sie in diesem Tutorial .
quelle