Ich habe folgende Projektstruktur:
/ Views / Shared / _Layout;
/ Areas / Area1 / Views / ControllerName / Index;
...
- / Areas / AreaN / Views / ControllerName / Index.
Gibt es eine Möglichkeit , alle Bereiche zu zwingen , die verwenden _Layout als Basis - Layout ?
Gibt es eine Möglichkeit, dies zu tun, ohne die _ViewStart- Datei hinzuzufügen (z. B. über die Routing-Konfiguration)?
Siehe auch:
Wie gebe ich verschiedene Layouts in der ViewStart-Datei von ASP.NET MVC 3 an?
Antworten:
Sie müssen nur eine Datei mit dem Namen hinzufügen:
Unter jedem Bereich Ansichten Ordner:
Bearbeiten Sie die Datei so, dass sie auf das Root-Layout verweist:
Damit dies funktioniert, müssen Sie keinen Wert in der Layout-Eigenschaft der Ansicht angeben. Andernfalls würden Sie das globale Layout überschreiben
Hinweis: Wie Tony bereits erwähnt hat, können Sie die Layout-Eigenschaften jeder Ansicht so bearbeiten, dass sie auf das Stammlayout verweisen. Dies ist jedoch nicht die empfohlene Methode, da Sie Ihre Ansichten mit Ihrem Layout koppeln und es schmerzhaft ändern würden
Bearbeiten 1
Wenn Sie Code zum Festlegen des Layouts der Standardansicht verwenden möchten, sollten Sie möglicherweise eine benutzerdefinierte Ansichts-Engine schreiben.
Versuchen Sie, über benutzerdefinierte
RazorViewEngine
und zu googelnRazorView
Dieser Artikel könnte ein guter Ausgangspunkt sein
http://weblogs.asp.net/imranbaloch/archive/2011/06/27/view-engine-with-dynamic-view-location.aspx
Ich habe so etwas noch nicht gemacht, aber ich hoffe, ich zeige Ihnen die richtige Richtung
quelle
_ViewStart
direkt im Ordner "Bereich" hinzufügen , um es auf alle Bereiche anzuwenden.Erweiterung der Antwort von Jupaol ....
Zumindest in VS2013 wird die Datei _ViewStart.cshtml beim Erstellen des Bereichs standardmäßig hinzugefügt, sodass sie bereits vorhanden ist. Sie können den Inhalt so ändern, wie er es bemerkt, um auf das Stammverzeichnis _Layout.cshtml zu verweisen. Sie können dann die Datei _Layout.cshtml in dem Bereich entfernen, da sie nicht mehr verwendet wird (und jetzt eine potenzielle Quelle der Verwirrung darstellt).
Bei diesem Routing in diesem Stammverzeichnis _Layout.cshtml müssen jedoch Bereiche berücksichtigt werden.
Die Standarddatei _Layout.cshtml enthält eine Reihe von ActionLink-Hilfsprogrammen, die geringfügig geändert werden müssen:
Fügen Sie den Parameter RouteValueDictionary zu allen ActionLink-Aufrufen hinzu, indem Sie Area = "" setzen. Beachten Sie, dass sich eine leere Zeichenfolge auf die Stammebene bezieht. Auf diese Weise funktionieren diese Links ordnungsgemäß, wenn sie aus einem Bereich heraus aufgerufen werden. Sie funktionieren weiterhin, wenn sie vom Stamm aus aufgerufen werden.
z.B:
quelle
Sie legen ein Layout fest mit:
@ {Layout = "_Layout"; }}
Wenn Sie dies einfacher machen möchten, können Sie alles auf einmal ändern. Vielleicht könnten Sie es einfach als View-Bag-Variable festlegen und an den Controller übergeben. Um es noch einfacher zu machen, können Sie einen Basis-Controller erstellen, von dem die anderen Controller erben, und das Layout der Ansichtstasche dort zuweisen.
Ich bin mir nicht sicher, warum sich das Routing ändern müsste, oder ich verstehe es nicht. Hoffe das hilft :)
quelle