En el proyecto ASP.NET MVC 3 predeterminado, el diseño y los archivos cshtml parciales comienzan con un guión bajo
_viewstart
_Layout
_LogOnPartial
¿Por qué esta convención y para qué sirve? ¿Necesito seguir esta convención?
¿El marco le da un significado especial a un .cshtml
archivo que comienza con un guión bajo?
asp.net
asp.net-mvc-3
razor
richb
fuente
fuente
Respuestas:
Razor fue desarrollado para páginas web ASP.NET (WebMatrix), que no tiene el mismo tipo de protección incorporada con respecto a las carpetas de vistas y enrutamiento que obtienes dentro de MVC. Dado que las páginas de diseño en las páginas web no están destinadas a ser servidas directamente, tienen el prefijo subrayado. Y el marco de páginas web se ha configurado para no permitir que los archivos con guiones bajos principales en sus nombres se soliciten directamente. Otros archivos .cshtml dentro de las páginas web generalmente necesitan ser navegables. Son el equivalente de archivos .asp o .php.
El equipo de ASP.NET ha declarado que las páginas web son un punto de partida dentro del desarrollo de ASP.NET, lo que debería conducir a la migración a MVC a tiempo (para aquellos que desean seguir adelante). Parte de eso significa que debería ser lo más fácil posible migrar de páginas web a MVC. En consecuencia, tiene sentido transferir las convenciones de nomenclatura establecidas dentro de las páginas web a los archivos MVC Razor.
Así que no es una razón técnica para prefijar los nombres de los archivos con un guión - que simplemente no es relevante para MVC.
[ACTUALIZACIÓN Oct 2018]
En el nuevo marco de ASP.NET Core Razor Pages (aparte de en la versión 2.1), los archivos con un guión bajo se ignoran cuando se generan rutas al inicio, incluso si tienen una
@page
directiva (que normalmente las convertiría en una página Razor enrutable) . Es por eso que tiene sentido nombrar el diseño y los archivos parciales con un guión bajo destacado en una aplicación Razor Pages si no están destinados a ser explorados.fuente
Así es como lo hace Ruby on Rails (los parciales comienzan con un _ pero la llamada Render parcial no incluye el _), y ASP.net MVC se ha inspirado mucho en él.
Realmente no hay una razón técnica, solo una convención para mostrar claramente la intención a otros desarrolladores (y a ti mismo 6 meses después) de decir: Esta es una vista parcial.
fuente
System.Web.HttpNotFoundHandler
para ellos).Las páginas que no pueden mostrarse mediante solicitudes directas de su navegador (páginas maestras, vistas parciales, etc.) tienen un guión bajo (_) al comienzo de sus nombres.
Entonces, si intenta hacer la solicitud a _Layout.cshtml (esta es la página maestra), recibirá un error del servidor.
Es una forma de distinguir los archivos que no se pueden examinar como páginas independientes, en el motor de visualización Razor.
Piénselo de esta manera ... en MVC 2 ... diferenciaría la vista parcial y el sitio maestro con el sufijo .master, .ascx, y las páginas normales son .aspx, por otro lado, en la vista Razor ... todas las vistas son .cshtml, por lo que para distinguir páginas parciales y maestras tendrán un prefijo (_). no es nada obligatorio, solo una "convención".
fuente
Hasta donde sé, esto es simplemente una convención utilizada para identificar la intención del archivo; No creo que realmente cambie el comportamiento del archivo. En la mayoría de los contextos de desarrollo, anteponer un guión bajo identifica algo destinado a uso "privado", ya sea por una clase o, en este caso, por otra plantilla.
fuente
No uso MVC, pero con las páginas web que también usan la sintaxis de la maquinilla de afeitar, el prefijo _ generalmente indica que la página no está destinada a que un usuario acceda a ella, sino a otras páginas o algún código. Si intenta navegar a una página que contiene el _prefix, asp.net evitará el acceso a él. Es por eso que se usa con páginas de diseño y otras páginas similares, ya que un usuario no debe acceder a ellas directamente.
Algo así como la carpeta App_Code en asp.net
fuente
/view
en un proyecto MVC ASP.NET predeterminado; el/views/web.config
archivo está configurado para evitarlo. Pero no hay nada que impida que regrese una acción del controlador.View("_Index", model);
Funciona bien; Simplemente lo hice cambiando el nombre de una vista a _Index.cshtml y cambiando la acción para llamar como lo hice anteriormente.