152 votes

Pourquoi le nom du fichier Razor _layout.cshtml comporte-t-il un trait de soulignement en tête ?

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

  • _viewstart
  • _Layout
  • _LogOnPartial

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

Le cadre donne-t-il une signification particulière à un .cshtml qui commence par un trait de soulignement ?

0 votes

J'utilise NancyFX avec Razor et comme par défaut, il restreint tout contenu qui n'est pas dans le dossier Content. (Cela peut être modifié dans web.config ou dans la configuration personnalisée), il est impossible de servir directement des fichiers tels que .cshtml. Je n'utilise donc pas de "_" en préambule à mes noms de vues car ce n'est PAS nécessaire et c'est laid.

217voto

Mike Brind Points 11445

Razor a été développé pour ASP.NET Web Pages (WebMatrix), qui ne dispose pas du même type de protection concernant les dossiers de vues et le routage que MVC. Comme les pages de mise en page des pages Web ne sont pas destinées à être servies directement, elles sont préfixées par un trait de soulignement. De plus, le cadre des pages Web a été configuré pour ne pas permettre aux fichiers dont le nom est précédé d'un trait de soulignement d'ê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 étaient un point de départ du développement ASP.NET, ce qui devrait conduire à une migration vers MVC à terme (pour ceux qui veulent passer à autre chose). Cela signifie en partie qu'il doit être aussi facile que possible de migrer des pages Web vers MVC. Par conséquent, il est logique de reporter les conventions de dénomination établies dans les pages Web sur les fichiers MVC Razor.

Alors là es une raison technique pour préfixer les noms de fichiers avec un trait de soulignement - ce n'est tout simplement pas pertinent pour MVC.

[MISE À JOUR Oct. 2018]

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

6 votes

Merci. Pour moi, c'est la réponse la plus perspicace. Je pensais à tort que Razor était lié à MVC. Je vois maintenant que la raison de l'underscore en tête est d'empêcher qu'ils soient servis directement sous ASP.NET Web Pages.

1 votes

Une convention de nommage qui a réellement une fonctionnalité liée, je pensais que MS saurait mieux. Et maintenant c'est reporté sur MVC, qui était supposé être une ardoise propre.

0 votes

Espérons qu'après les versions actuelles de .NET Framework 4.5.1 et Visual Studio 2013, qui incluent la fonctionnalité "One ASP.NET", ils pourront enfin s'affranchir de ces limitations techniques et de ce codage difficile. Bien sûr, il est essentiel que les fichiers standard ne soient jamais partagés, comme c'est le cas des répertoires *.config, APP_Code et APP_Data actuels. Mais cette logique devrait se trouver quelque part dans un fichier de configuration (configuration machine par défaut) afin qu'elle puisse être remplacée. De même, les noms par défaut des pages communes devraient être configurables (Layout/Error/etc...).

12voto

Michael Stum Points 72046

C'est ainsi que Ruby on Rails procède (les partiels commencent par un _ mais l'appel à Render Partial n'inclut pas le _), et ASP.net MVC s'en est fortement inspiré.

Aucune raison technique vraiment, 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.

0 votes

C'est incorrect, comme l'indique la réponse ci-dessus. L'underscore a une fonction de sécurité.

1 votes

@iJungleBoy Voir la réponse acceptée. Pour ASP.net MVC (sur lequel porte cette question), il n'y a pas de fonctionnalité de sécurité. Voir le web.config dans le dossier Views qui bloque déjà tous les fichiers cshtml et aspx, soulignés ou non (met en place System.Web.HttpNotFoundHandler pour eux).

8voto

Juztin Points 94

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 principale), vous obtiendrez une erreur du serveur.

C'est une façon de distinguer les fichiers qui ne peuvent pas être parcourus comme des pages indépendantes, dans le moteur de visualisation Razor.

Pensez-y de cette façon... dans MVC 2 ... vous différentiez la vue partielle et le master site avec le sufix .master, .ascx, et les pages normales sont .aspx, d'autre part, dans Razor view ... toutes les vues sont .cshtml, donc pour distinguer les pages partielles et masterpages ils auront un préfixe (_). ce n'est rien d'obligatoire, juste une "convention".

4 votes

Mais dans cette logique, tous les fichiers cs et cshtml ne devraient-ils pas être préfixés par un trait de soulignement ?

0 votes

Si tous les fichiers avaient _ comme préfixe alors votre site ne fonctionnerait pas... les fichiers qui ont _prefixe sont rendus dans une page normale...(pour les partiels), et le sitemaster est un template... donc il doit avoir du contenu pour être affiché.

0 votes

Je viens d'essayer, et IIS sur ma machine ne sert aucun fichier du répertoire Views. Pas même les fichiers .html statiques. Donc je ne pense vraiment pas que ce soit la solution.

2voto

futureal Points 1508

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 change réellement le comportement du fichier. Dans la plupart des contextes de développement, l'ajout d'un trait de soulignement identifie quelque chose comme étant destiné à un usage "privé", que ce soit par une classe, ou dans ce cas, par un autre modèle.

1voto

Travis Points 21

Je n'utilise pas MVC, mais avec les pages web qui utilisent également la syntaxe razor, le préfixe _ indique généralement que la page n'est pas destinée à être accessible par un utilisateur mais par d'autres pages ou du code. Si vous essayez de naviguer vers une page qui contient le préfixe _, asp.net en empêchera l'accès. C'est pourquoi il est utilisé avec les pages de mise en page et d'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.

0 votes

@MikeBrind Vous ne pouvez pas "naviguer" vers/naviguer directement. tout des vues sous /view dans un projet ASP.NET MVC par défaut ; l'option /views/web.config est mis en place pour l'empêcher. Mais il y a nada pour éviter qu'une action du contrôleur ne renvoie View("_Index", model); Cela fonctionne très bien ; je l'ai fait en changeant le nom d'une vue en _Index.cshtml et en changeant l'action pour appeler comme je l'ai fait ci-dessus.

0 votes

@MikeBrind Cette question porte sur MVC, pas sur les pages Web. C'est vrai, je ne l'ai pas précisé dans mon commentaire initial.

0 votes

@MikeBrind Je répondais - et répond toujours - à este réponse. Pas la vôtre. Mon commentaire initial était trompeur (je mentionnais aussi les "partiels", cependant), je l'ai donc supprimé. Ce que je voulais dire, et ce que je veux dire, c'est que les caractères de soulignement ont nada à faire avec le fait de ne pas pouvoir charger une vue dans MVC. Cet utilisateur a même commencé à dire "Je n'utilise pas MVC", alors que la question portait sur MVC. Je m'assure juste que quelqu'un qui viendra plus tard lire este ne pense pas qu'en MVC, un trait de soulignement affecte la capacité d'une action de contrôleur à charger une vue. Ce n'est pas grave. Nous sommes d'accord que j'étais inintelligent dans ma façon de parler. C'est fait.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X