ASP.NET MVC: Quel est le but de @section? [fermé]

132

Pour une application ASP.NET MVC, j'ai vu cet article de blog . L'auteur ScottGu ajoute @sectionà Index.cshtml.

J'ai quelques questions (en référence à l'article ci-dessus):

  • Index.cshtml est-il une vue partagée?
  • L'exemple de code utilise du @sectioncode dans une vue particulière. Pourquoi?

Quelqu'un peut-il expliquer pourquoi et quand j'utiliserais @sectiondans une vue?

Un faux
la source
4
Jetez un œil à ce tutoriel: weblogs.asp.net/scottgu/archive/2010/12/30/…
Adriano Repetti
1
Bien que l'on puisse affirmer qu'une meilleure raison de fermeture aujourd'hui serait "principalement basée sur l'opinion", elle serait toujours fermée. Il n'y a pas de moyen définitif d'utiliser les sections.
Richard
2
Il n'y a aucun moyen définitif d'utiliser quoi que ce soit. Regardez comment les gens utilisent Internet ...
keji

Réponses:

138

@sectionest pour définir un contenu sont remplacés à partir d'une vue partagée. En gros, c'est un moyen pour vous d'ajuster votre vue partagée (similaire à une page maître dans Web Forms).

Vous pourriez trouver l'article de Scott Gu à ce sujet très intéressant .

Edit: Basé sur une clarification de question supplémentaire

La @RenderSectionsyntaxe entre dans la vue partagée, telle que:

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

Cela serait alors placé dans votre vue avec la @Sectionsyntaxe:

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

Dans MVC3 +, vous pouvez définir directement le fichier de mise en page à utiliser pour la vue ou vous pouvez avoir une vue par défaut pour toutes les vues.

Les paramètres d'affichage communs peuvent être définis dans _ViewStart.cshtml qui définit la vue de mise en page par défaut semblable à celle-ci:

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

Vous pouvez également définir la vue partagée à utiliser directement dans le fichier, comme index.cshtml directement, comme indiqué dans cet extrait de code.

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

Il existe plusieurs façons d'ajuster ce paramètre, quelques autres étant mentionnées dans cette réponse SO .

Frazell Thomas
la source
Merci Frazell! J'ai ajouté plus à ma question en référence à ce tutoriel. Pouvez-vous expliquer davantage? Merci encore!
Un faux
Hey @ABogus, j'ai mis à jour la réponse. J'espère que ces informations supplémentaires sont utiles :)
Frazell Thomas
21

Un bon exemple est Javascript. Vous voulez que ce soit au bas de la page qui est rendue dans le navigateur, car il s'agit de la meilleure pratique.

Comment feriez-vous cela à partir d'une vue basée sur une mise en page / une page principale où vous ne pouvez accéder qu'au milieu de la page?

Pour ce faire, déclarez une section Scripts au bas de la page Disposition. Ensuite, vous pouvez ajouter du contenu, dans ce cas Javascript inclut (je l'espère!), Depuis votre page de visualisation vers le bas de votre page de mise en page.

John Mc
la source
4

Vous souhaitez utiliser des sections lorsque vous souhaitez qu'un peu de code / contenu soit rendu dans un espace réservé qui a été défini dans une page de mise en page.

Dans l'exemple spécifique que vous avez lié, il a défini la RenderSection dans le _Layout.cshtml. Toute vue qui utilise cette disposition peut définir une @section du même nom que défini dans Layout, et elle remplacera l'appel RenderSection dans la disposition.

Vous vous demandez peut-être comment nous savons que Index.cshtml utilise cette mise en page? Cela est dû à un peu de convention MVC / Razor. Si vous regardez la boîte de dialogue dans laquelle il ajoute la vue, la case "Utiliser la mise en page ou la maquette" est cochée, et juste en dessous, elle indique "Laisser vide si elle est définie dans un fichier Razor _viewstart". Il n'est pas affiché, mais à l'intérieur de ce fichier _ViewStart.cshtml se trouve un code comme:

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

La façon dont viewstarts fonctionne est que tout fichier cshtml dans le même répertoire ou répertoires enfants exécutera ViewStart avant qu'il ne s'exécute.

C'est ce qui nous indique qu'Index.cshtml utilise Shared / _Layout.cshtml.

Ischell
la source
Belle explication de _ViewStart.
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ
3

Il vous permet de définir un @Sectioncode dans votre modèle que vous pouvez ensuite inclure dans d'autres fichiers. Par exemple, une barre latérale définie dans le modèle peut être référencée dans une autre vue incluse.

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

J'espère que cela t'aides.

Chrislhardin
la source