ASP.NET MVC: Was ist der Zweck von @section? [geschlossen]

132

Für eine ASP.NET MVC-Anwendung habe ich diesen Blog-Artikel gesehen . Der Autor ScottGu fügt @sectionder Index.cshtml hinzu.

Ich habe ein paar Fragen (siehe Artikel oben):

  • Ist Index.cshtml eine freigegebene Ansicht?
  • Der Beispielcode verwendet @sectionCode in einer bestimmten Ansicht. Warum?

Kann jemand bitte erklären, warum und wann ich @sectionin einer Ansicht verwenden würde?

Ein Schwindel
quelle
4
Schauen Sie sich dieses Tutorial an: weblogs.asp.net/scottgu/archive/2010/12/30/…
Adriano Repetti
1
Während argumentiert werden kann, dass ein besserer Schließungsgrund heute "hauptsächlich meinungsbasiert" wäre, wäre er dennoch geschlossen. Es gibt keine definitive Möglichkeit, Abschnitte zu verwenden.
Richard
2
Es gibt keine definitive Möglichkeit, etwas zu verwenden. Schauen Sie sich nur an, wie die Leute das Internet nutzen ...
Keji

Antworten:

138

@sectiondient 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 @RenderSectionSyntax wird in die freigegebene Ansicht übernommen, z. B.:

<div id="sidebar">
    @RenderSection("Sidebar", required: false)
</div>

Dies würde dann in Ihrer Ansicht mit der folgenden @SectionSyntax platziert:

@section Sidebar{
    <!-- Content Here -->
}

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:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

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.

@{
    ViewBag.Title = "Corporate Homepage";
    ViewBag.BodyID = "page-home";
    Layout = "~/Views/Shared/_Layout2.cshtml";
}

Es gibt verschiedene Möglichkeiten, diese Einstellung anzupassen, wobei einige weitere in dieser SO-Antwort erwähnt werden .

Frazell Thomas
quelle
Danke Frazell! Ich habe meiner Frage in Bezug auf dieses Tutorial mehr hinzugefügt. Kannst du es weiter erklären? Danke noch einmal!
Ein Schein
Hey @ABogus Ich habe die Antwort aktualisiert. Hoffentlich sind diese zusätzlichen Informationen hilfreich :)
Frazell Thomas
21

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.

John Mc
quelle
4

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:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

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.

Ischell
quelle
Schöne Erklärung von _ViewStart.
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ
3

Hiermit können Sie einen @SectionCode 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.

//This could be used to render a @Section defined as @Section SideBar { ...
@RenderSection("SideBar", required: false);

Hoffe das hilft.

chrislhardin
quelle