Dans le projet ASP.NET MVC 3 par défaut, les fichiers de mise en page et partiels cshtml commencent par un trait de soulignement
_viewstart
_Layout
_LogOnPartial
Pourquoi cette convention et à quoi sert-elle? Dois-je suivre cette convention?
Le framework donne-t-il une signification particulière à un .cshtml
fichier qui commence par un trait de soulignement?
asp.net
asp.net-mvc-3
razor
richb
la source
la source
Réponses:
Razor a été développé pour les pages Web ASP.NET (WebMatrix), qui n'ont pas le même type de protection intégrée concernant 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 servies directement, elles sont précédées du trait de soulignement. Et le cadre de pages Web a été configuré pour ne pas autoriser les fichiers avec des traits de soulignement dans leur nom 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 sont un point de départ dans le développement ASP.NET, ce qui devrait conduire à la migration vers MVC à temps (pour ceux qui veulent passer à autre chose). Cela signifie en partie qu'il devrait être aussi simple que possible de migrer des pages Web vers MVC. Par conséquent, il est judicieux de transférer les conventions de dénomination établies dans les pages Web vers des fichiers MVC Razor.
Il y a donc une raison technique de préfixer les noms de fichiers avec un trait de soulignement - cela n'est tout simplement pas pertinent pour MVC.
[MISE À JOUR octobre 2018]
Dans le nouveau framework ASP.NET Core Razor Pages (sauf dans la version 2.1), les fichiers avec 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 une
@page
directive (ce qui en ferait normalement une page Razor routable) . C'est pourquoi il est judicieux de nommer la 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.la source
C'est ainsi que Ruby on Rails le fait (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.
la source
System.Web.HttpNotFoundHandler
pour eux).Les pages qui ne peuvent pas être affichées par des requêtes 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 une façon de distinguer les fichiers qui ne peuvent pas être parcourus en tant que pages autonomes, dans le moteur de visualisation Razor.
Pensez-y de cette façon ... dans MVC 2 ... vous différencieriez la vue partielle et le site maître avec le suffixe .master, .ascx, et les pages normales sont .aspx, par contre, en vue Razor ... toutes les vues sont .cshtml, donc pour distinguer les pages partielles et maîtres, elles auront un préfixe (_). ce n'est rien d'obligatoire, juste une "convention".
la source
Autant que je sache, il s'agit simplement d'une convention utilisée pour identifier l'intention du dossier; Je ne pense pas que cela changera réellement le comportement du fichier. Dans la plupart des contextes de développement, le préfixe 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, un autre modèle.
la source
Je n'utilise pas MVC, mais avec des 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 d'accéder à une page contenant le préfixe _, asp.net en empêcherait l'accès. C'est pourquoi il est utilisé avec des pages de mise en page et d'autres pages similaires, car ils ne doivent pas être accédés directement par un utilisateur.
Quelque chose comme le dossier App_Code dans asp.net
la source
/view
dans un projet ASP.NET MVC par défaut; le/views/web.config
fichier est configuré pour l'empêcher. Mais rien n'empêche une action de contrôleur de revenir.View("_Index", model);
Cela fonctionne très bien; Je l'ai juste 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.