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
@section
code dans une vue particulière. Pourquoi?
Quelqu'un peut-il expliquer pourquoi et quand j'utiliserais @section
dans une vue?
asp.net-mvc
Un faux
la source
la source
Réponses:
@section
est 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
@RenderSection
syntaxe entre dans la vue partagée, telle que:Cela serait alors placé dans votre vue avec la
@Section
syntaxe: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:
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.
Il existe plusieurs façons d'ajuster ce paramètre, quelques autres étant mentionnées dans cette réponse SO .
la source
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.
la source
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:
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.
la source
Il vous permet de définir un
@Section
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.J'espère que cela t'aides.
la source