ASP.NET MVC: Quel est le but de @section?

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

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

  • Est-ce que Index.cshtml est une vue partagée?
  • L’exemple de code utilise le code @section dans une vue particulière. Pourquoi?

Quelqu’un peut-il expliquer pourquoi et quand utiliser @section dans une vue?

@section sert à définir un contenu qui est @section par une vue partagée. Fondamentalement, il vous permet d’ajuster votre vue partagée (similaire à une page maître dans les formulaires Web).

Vous pourriez trouver Scott Gu écrit sur ce sujet très intéressant .

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

La syntaxe @RenderSection va dans la vue partagée, telle que:

  

Ceci serait alors placé dans votre vue avec la syntaxe de @Section :

 @section Sidebar{  } 

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

Les parameters de vue communs peuvent être définis dans _ViewStart.cshtml, qui définit la vue de présentation par défaut similaire à celle-ci:

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

Vous pouvez également définir la vue partagée à utiliser directement dans le fichier, par exemple index.cshtml directement, comme illustré dans cet extrait.

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

Vous pouvez modifier ce paramètre de différentes manières avec quelques autres éléments mentionnés dans cette réponse SO .

Un bon exemple est le Javascript. Vous voulez que cela se trouve au bas de la page qui est rendue dans le navigateur, car il s’agit de la meilleure pratique.

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

Vous faites cela en déclarant une section Scripts au bas de la page Mise en page. Ensuite, vous pouvez append du contenu, dans ce cas, le Javascript inclut (j’espère!), Depuis votre page de visualisation au bas de votre page de mise en page.

Vous souhaitez utiliser des sections lorsque vous souhaitez générer un peu de code / contenu dans un espace réservé défini dans une page de disposition.

Dans l’exemple spécifique que vous avez lié, il a défini la RenderSection dans le fichier _Layout.cshtml. Toute vue qui utilise cette mise en page peut définir une @section du même nom que celle définie dans Présentation, et elle remplacera l’appel RenderSection dans la présentation.

Peut-être vous demandez-vous comment nous soaps que Index.cshtml utilise cette mise en page? Cela est dû à un peu de convention MVC / Razor. Si vous regardez la boîte de dialog dans laquelle il ajoute la vue, la case “Utiliser la mise en page ou la maquette” est cochée et juste en dessous, il 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, le code est le suivant:

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

La façon dont viewstarts fonctionne est que tout fichier cshtml dans le même répertoire ou les répertoires enfants exécutera le ViewStart avant de s’exécuter.

C’est ce qui nous dit que Index.cshtml utilise Shared / _Layout.cshtml.

Il vous permet de définir une @Section de code 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.