Hier ist die About.cshtml aus der Standard-MVC 3-Vorlage:
@{
ViewBag.Title = "About Us";
}
<h2>About</h2>
<p>
Put content here.
</p>
Ich würde erwarten, dass ein Verweis auf die _ViewStart-Datei in der gefunden wird About.cshtml
, aber dies ist eindeutig nicht der Fall .
Ich habe in global.asax
und gesucht web.config
, aber ich kann nicht herausfinden, wie die About.cshtml
Datei mit dem Layout aus der _ViewStart-Datei "verknüpft" ist.
Alles funktioniert wie erwartet, ich möchte nur wissen, was unter der Haube los ist ...
ViewLocationFormats = ViewLocationFormats.Union(new string[] { "~/Inspinia/ExampleViews/{1}/{0}.cshtml" }).ToArray();
. Infolgedessen musste ich eine Kopie meiner Datei _ViewStart.cshtml zu "~ / Inspinia / ExampleViews" hinzufügen, da sie sonst nicht aufgenommen und kein Layout festgelegt wurde._ViewStart
in jeden Unterordner einen Ordner einfügen, der mit den Ansichten in diesem Unterordner verknüpft ist?Im Allgemeinen wird diese Fähigkeit des MVC-Frameworks, _Viewstart.cshtml zu "kennen", als "Codierung nach Konvention" bezeichnet.
Wikipedia
Es gibt keine Magie. Es wurde gerade in die Kerncodebasis des MVC-Frameworks geschrieben und ist daher etwas, von dem MVC "weiß". Deshalb finden Sie es nicht in den .config-Dateien oder anderswo; Es ist tatsächlich im MVC-Code. Sie können diese Konventionen jedoch überschreiben, um sie zu ändern oder auf Null zu setzen.
quelle
Nur ein weiterer Gedanke.
Wenn Sie eine eigene
cshtml
Datei als allgemeine Vorlage haben möchten , können Sie dies auf diese Weise tunIn Ihrem können
_viewstart.cshtml
Sie Ihre gemeinsamecshtml
Datei erwähnen .quelle
Der Quellcode ist ein viel besserer Ort, um danach zu suchen als die Dokumentation.
Unter Bezugnahme auf den MVC 6-Code von Github haben wir einige interessante Dateien
----aktualisieren----
Aufgrund von Änderungen in der Quellstruktur finden Sie die Informationen zum Sammeln von Viewstart-Seiten jetzt in RazorViewEngine.cs. Suchen Sie nach der Funktion "GetViewStartPages".
----/aktualisieren----
Um zu beantworten, wie sie ins Spiel kommen, schauen Sie sich RazorView an , das meiner Meinung nach (aufgrund von IView) mit der MVC-Pipeline verbunden ist. Diese Datei verfügt über eine RenderAsync-Methode, die von der MVC-Pipeline aufgerufen wird, um die angeforderte Ansicht zu rendern.
RenderAsync ruft RenderPage und dann RenderLayout auf (HINWEIS AUF DIE BESTELLUNG). Die RenderPage ruft zuerst auf, um Viewstart-Dateien zu verarbeiten (beachten Sie Plural, es kann mehr als eine _viewstart-Datei geben).
Die gesuchten Informationen können daher über die Funktion RenderViewStartAsync in der Datei RazorView.cs unter dem Namespace Microsoft.AspNet.Mvc.Razor abgerufen werden .
quelle
Dies kann dieser Frage jetzt einige zusätzliche Informationen hinzufügen (2016 ala MVC4, MVC5).
Die Razor-Engine findet und führt den Code in _ViewStart.cshtml vor jedem anderen Code aus, der sich in demselben Verzeichnis oder Unterverzeichnis befindet, in dem sich die _ViewStart.cshtml befindet.
Jede Ansicht kann die Layout- Eigenschaft oder einen ihrer Werte überschreiben .
Ich dachte nur, ich könnte ein bisschen mehr Informationen hinzufügen, um Ihnen zu zeigen, warum es _ViewStart ist.
Wenn Sie ILSpy erhalten und den Code in der RazorViewEngine (System.Web.Mvc.dll) untersuchen, werden Sie feststellen, dass der Code selbst auf diesen Namen verweist.
Sie können sehen, dass die RazorViewEngine nach einer Datei mit diesem Namen sucht:
quelle
Wenn Sie ein gemeinsames Layout für Ihre Seiten haben möchten, müssen Sie das gemeinsame Layout definieren und eine Ansicht mit dem Layout verknüpfen. Wir müssen die Layout-Eigenschaften für jede einzelne Ansicht festlegen. Dies verstößt gegen das DRY-Prinzip (Don't Repeat Yourself). Zu diesem Zweck hat .Net Framework die Datei "_ViewStart.cshtml" bereitgestellt, die sich im Ansichtsordner befindet. Wir platzieren Layoutinformationen in der Datei "_ViewStart.cshtml" und jede Ansicht verwendet standardmäßig diese Layoutinformationen. Wenn Sie andere Layoutinformationen angeben möchten, nehmen wir an, Sie können eine neue "_ViewStart.cshtml" mit Bezug auf dieses Layout erstellen und im Ordner "Home View" ablegen.
quelle
Die kurze Antwort lautet : ViewStarts zuerst gestartet, wenn eine Ansicht gerendert wird. Die lange Geschichte ist unten:
Die Geschichte der Erstellung einer einzelnen Ansichtsdatei:
Hoffentlich macht Sie dies darauf aufmerksam, was wirklich in den unbekannten Geheimnissen des Lebenszyklus Ihres Programms vor sich geht.
quelle