Für eine ASP.NET MVC-Anwendung habe ich diesen Blog-Artikel gesehen . Der Autor ScottGu fügt @section
der Index.cshtml hinzu.
Ich habe ein paar Fragen (siehe Artikel oben):
- Ist Index.cshtml eine freigegebene Ansicht?
- Der Beispielcode verwendet
@section
Code in einer bestimmten Ansicht. Warum?
Kann jemand bitte erklären, warum und wann ich @section
in einer Ansicht verwenden würde?
asp.net-mvc
Ein Schwindel
quelle
quelle
Antworten:
@section
dient zum Definieren eines Inhalts, der aus einer gemeinsam genutzten Ansicht überschrieben wird. Grundsätzlich können Sie auf diese Weise Ihre freigegebene Ansicht anpassen (ähnlich einer Masterseite in Web Forms).Vielleicht finden Sie Scott Gu's Artikel sehr interessant .
Bearbeiten: Basierend auf zusätzlicher Fragenklärung
Die
@RenderSection
Syntax wird in die freigegebene Ansicht übernommen, z. B.:Dies würde dann in Ihrer Ansicht mit der folgenden
@Section
Syntax platziert:In MVC3 + können Sie entweder die Layoutdatei definieren, die direkt für die Ansicht verwendet werden soll, oder Sie können eine Standardansicht für alle Ansichten festlegen.
Allgemeine Ansichtseinstellungen können in _ViewStart.cshtml festgelegt werden, wodurch die Standardlayoutansicht ähnlich wie folgt definiert wird:
Sie können die freigegebene Ansicht auch so einstellen, dass sie direkt in der Datei verwendet wird, z. B. index.cshtml, wie in diesem Snippet gezeigt.
Es gibt verschiedene Möglichkeiten, diese Einstellung anzupassen, wobei einige weitere in dieser SO-Antwort erwähnt werden .
quelle
Ein gutes Beispiel ist Javascript. Sie möchten, dass sich dies am Ende der Seite befindet, die im Browser gerendert wird, da dies eine bewährte Methode ist.
Wie würden Sie dies in einer Ansicht tun, die auf einem Layout / einer Masterseite basiert und auf die Sie nur in der Mitte der Seite zugreifen können?
Sie tun dies, indem Sie unten auf der Seite Layout einen Abschnitt Skripte deklarieren. Dann können Sie Inhalte, in diesem Fall Javascript enthält (ich hoffe!), Von Ihrer Ansichtsseite bis zum Ende Ihrer Layoutseite hinzufügen.
quelle
Sie möchten Abschnitte verwenden, wenn ein Teil des Codes / Inhalts in einem Platzhalter gerendert werden soll, der auf einer Layoutseite definiert wurde.
In dem von Ihnen verlinkten Beispiel hat er den RenderSection in der Datei _Layout.cshtml definiert. Jede Ansicht, die dieses Layout verwendet, kann einen @ -Abschnitt mit demselben Namen wie in Layout definiert definieren und ersetzt den RenderSection-Aufruf im Layout.
Vielleicht fragen Sie sich, woher wir wissen, dass Index.cshtml dieses Layout verwendet? Dies liegt an einigen MVC / Razor-Konventionen. Wenn Sie sich das Dialogfeld ansehen, in dem er die Ansicht hinzufügt, ist das Kontrollkästchen "Layout oder Masterseite verwenden" aktiviert und direkt darunter wird "Leer lassen, wenn es in einer Razor _viewstart-Datei festgelegt ist" angezeigt. Es wird nicht angezeigt, aber in dieser Datei _ViewStart.cshtml befindet sich Code wie folgt:
Viewstarts funktionieren so, dass jede cshtml-Datei im selben Verzeichnis oder in denselben untergeordneten Verzeichnissen den ViewStart ausführt, bevor er selbst ausgeführt wird.
Was uns sagt, dass Index.cshtml Shared / _Layout.cshtml verwendet.
quelle
Hiermit können Sie einen
@Section
Code in Ihrer Vorlage definieren, den Sie dann in andere Dateien aufnehmen können. Beispielsweise könnte auf eine in der Vorlage definierte Seitenleiste in einer anderen enthaltenen Ansicht verwiesen werden.Hoffe das hilft.
quelle