web-dev-qa-db-fra.com

Pourquoi Razor _layout.cshtml a-t-il un soulignement de tête dans le nom de fichier?

Dans le projet ASP.NET MVC 3 par défaut, la mise en page et les fichiers cshtml partiels commencent par un trait de soulignement

  • _viewstart
  • _Layout
  • _LogOnPartial

Pourquoi cette convention et à quoi sert-elle? Dois-je suivre cette convention?

Le cadre donne-t-il une signification particulière à un .cshtml fichier commençant par un trait de soulignement?

139
richb

Razor a été développé pour les pages Web ASP.NET (WebMatrix), qui n'ont pas le même type de protection intégré en ce qui concerne les dossiers Views et le routage que vous obtenez dans MVC. Étant donné que les pages de mise en page des pages Web ne sont pas destinées à être diffusées directement, elles sont préfixées par le trait de soulignement. Et le cadre des pages Web a été configuré pour ne pas autoriser les fichiers avec des traits de soulignement en tête dans leurs noms à être demandés directement. Les autres fichiers .cshtml des pages Web doivent généralement être consultables. Ils sont l'équivalent des fichiers .asp ou .php.

L'équipe ASP.NET a déclaré que les pages Web sont un point de départ dans le développement d'ASP.NET, ce qui devrait conduire à temps à la migration vers MVC (pour ceux qui souhaitent passer à autre chose). Cela signifie en partie qu'il devrait être aussi facile que possible de migrer des pages Web vers MVC. Par conséquent, il est logique de transférer les conventions de dénomination établies dans les pages Web vers les fichiers MVC Razor.

Donc, il y a une raison technique pour préfixer les noms de fichiers avec un trait de soulignement - cela n'est tout simplement pas pertinent pour MVC.

[MISE À JOUR oct. 2018]

Dans le nouveau framework ASP.NET Core Razor Pages (sauf dans la version 2.1), les fichiers avec un soulignement de tête sont ignorés lorsque les routes sont générées au démarrage - même si elles ont un @page directive (ce qui en ferait normalement une page de rasage routable). C'est pourquoi il est logique de nommer la mise en page et les fichiers partiels avec un soulignement de tête dans une application Razor Pages s'ils ne sont pas destinés à être parcourus.

199
Mike Brind

Voilà comment Ruby on Rails le fait (les partiels commencent par un _ mais l'appel de rendu partiel n'inclut pas le _)) et ASP.net MVC a dessiné lourde inspiration.

Pas vraiment de raison technique, juste une convention pour montrer clairement l'intention aux autres développeurs (et à vous-même 6 mois plus tard) de dire: Ceci est une vue partielle.

13
Michael Stum

Les pages qui ne peuvent pas être affichées par des demandes directes de votre navigateur (pages maîtres, vues partielles, etc.) ont un trait de soulignement (_) au début de leur nom.

Donc, si vous essayez de faire la demande à _Layout.cshtml (c'est la page maître), vous obtiendrez une erreur du serveur.

C'est un moyen de distinguer les fichiers qui ne peuvent pas être parcourus en tant que pages autonomes, dans le moteur de vue Razor.

Pensez-y de cette façon ... dans MVC 2 ... vous différencieriez la vue partielle et le mastersite avec le suffixe .master, .ascx, et les pages normales sont .aspx, d'autre part, en vue Razor ... toutes les vues sont .cshtml, donc pour distinguer les pages partielles et les pages maîtres, elles auront un préfixe (_). son rien obligatoire, juste une "convention".

7
Juztin

Pour autant que je sache, il s'agit simplement d'une convention utilisée pour identifier l'intention du fichier; Je ne pense pas que cela changera réellement le comportement du fichier. Dans la plupart des contextes de développement, l'ajout d'un trait de soulignement identifie quelque chose qui doit être destiné à un usage "privé", que ce soit par une classe ou, dans ce cas, par un autre modèle.

2
futureal

Je n'utilise pas MVC, mais avec les pages Web qui utilisent également la syntaxe de rasoir, le préfixe _ signifie généralement que la page n'est pas destinée à être accédée par un utilisateur mais par d'autres pages ou du code. Si vous essayez de naviguer vers une page qui contient le _prefix, asp.net empêcherait d'y accéder. C'est pourquoi il est utilisé avec les pages de mise en page et autres pages de ce type car elles ne doivent pas être accessibles directement par un utilisateur.

Quelque chose comme le dossier App_Code dans asp.net

1
Travis