¿Por qué Razor Layout?¿cshtml tiene un guion bajo en el nombre del archivo?


En el valor predeterminado ASP.NET Los archivos de proyecto, diseño y cshtml parciales de MVC 3 comienzan con un guion bajo

  • _viewstart
  • _Layout
  • _LogOnPartial

¿Qué significa esta convención y para qué se utiliza? ¿Tengo que seguir esta convención?

¿El framework le da algún significado especial a un archivo .cshtml que comienza con un subrayado?

Author: p.campbell, 2011-01-02

5 answers

Razor fue desarrollado para ASP.NET Páginas web (WebMatrix), que no tiene el mismo tipo de protección incorporada con respecto a las carpetas de vistas y el enrutamiento que obtiene dentro de MVC. Dado que las páginas de diseño en las Páginas Web no están destinadas a ser servidas directamente, van precedidas por el guion bajo. Y el marco de páginas Web se ha configurado para no permitir que los archivos con guiones bajos iniciales en sus nombres se soliciten directamente. Otro .los archivos cshtml dentro de las páginas Web generalmente deben ser navegables. Son el equivalente de .asp or .archivos php.

El ASP.NET equipo han declarado que las páginas Web es un punto de partida dentro ASP.NET desarrollo, que debería conducir a la migración a MVC en el tiempo (para aquellos que quieren 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 hay es una razón técnica para anteponer los nombres de los archivos con un guion bajo, simplemente no es relevante para MVC.

[ACTUALIZACIÓN Oct 2018]

En el nuevo ASP.NET Core Razor Pages framework, los archivos con un guion bajo inicial se ignoran cuando se generan rutas al inicio, incluso si tienen una directiva @page (que normalmente los convertiría en una página de Razor enrutable). Es por eso que tiene sentido nombrar el diseño y los archivos parciales con un subrayado inicial en una aplicación Razor Pages si no están destinados a ser hojeado.

 196
Author: Mike Brind,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-01 06:28:18

Así es como Ruby on Rails lo hace (los parciales comienzan con un _ pero la llamada Parcial de Render no incluye el_), y ASP.net MVC se ha inspirado mucho en él.

No hay razón técnica realmente, solo una convención para mostrar claramente la intención de otros desarrolladores (y a ti mismo 6 meses después) de decir: Esta es una vista parcial.

 13
Author: Michael Stum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-02 02:12:08

Las páginas que no se pueden mostrar mediante solicitudes directas de su navegador (páginas maestras, vistas parciales, etc.) tienen un guion bajo (_) al principio de sus nombres.

Así que si intenta hacer la solicitud a _Layout.cshtml (esta es la página maestra) obtendrá un error del servidor.

Es una forma de distinguir los archivos que no se pueden navegar como páginas independientes, en Razor view engine.

Piénsalo de esta manera... en MVC 2 ... usted diferenciaría la vista parcial y la mastersite con el sufix .maestro, .ascx, y las páginas normales son .aspx, por otro lado, en Razor View... todas las vistas son .cshtml, por lo que para distinguir partial y masterpages tendrán un prefijo (_). no es nada obligatorio, solo una "convención".

 7
Author: Juztin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-02 02:08:43

Por lo que 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 subrayado identifica algo que debe ser destinado para uso "privado", ya sea por una clase, o en este caso, otra plantilla.

 2
Author: futureal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-02 01:32:38

No uso MVC, pero con las páginas web que también usan la sintaxis de razor, el prefijo _ generalmente siginifica que la página no está destinada a ser accedida por un usuario, sino por otras páginas o algún código. Si intenta navegar a una página que contiene el _prefijo, asp.net impediría el acceso a ella. Es por eso que se usa con páginas de diseño y otras páginas similares, ya que no deben ser accedidas directamente por un usuario.

Algo así como la carpeta App_Code en asp.net

 1
Author: Travis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-05 22:31:13