2011-01-02 11 views
134

En el predeterminado ASP.NET MVC 3 proyecto, diseño & archivos cshtml parciales comienzan con un guión¿Por qué Razor _layout.cshtml tiene un guión bajo inicial en el nombre del archivo?

  • _viewstart
  • _Layout
  • _LogOnPartial

¿Cuál es esta convención media, y lo ¿se utiliza para? ¿Debo seguir esta convención?

¿El marco da algún significado especial a un archivo .cshtml que comienza con un guión bajo?

+0

utilizo NancyFX con la maquinilla de afeitar y ya que por defecto restringe cualquier contenido que no está en la carpeta de contenido. (Esto puede ser anulado en web.config o configuración personalizada) es imposible servir ningún archivo, como .cshtml directamente. Así que no utilizo "_" antes de los nombres de mi vista porque NO es necesario y feo. –

Respuesta

193

Razor fue desarrollado para páginas web ASP.NET (WebMatrix), que no tiene el mismo tipo de protección integrada con respecto a carpetas de vistas y enrutamiento que usted obtiene dentro de MVC. Dado que las páginas de diseño en páginas web no están destinadas a ser servidas directamente, se les agrega el subrayado. Y el marco de las Páginas Web ha sido configurado para no permitir que los archivos con guiones bajos en sus nombres sean solicitados directamente. Otros archivos .cshtml dentro de las páginas web generalmente deben ser navegables. Son el equivalente de los 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 debe 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.

+5

Gracias. Para mí esta es la respuesta más perspicaz. Estaba bajo el error de que Razor estaba atada a MVC. Ahora veo que la razón del subrayado principal es para evitar que se les sirva directamente en las páginas web de ASP.NET. – richb

+1

Una convención de nomenclatura que en realidad tiene una funcionalidad vinculada, pensé que la MS sabría mejor. Y ahora se transfiere a MVC, que se suponía que era borrón y cuenta nueva. –

+0

Afortunadamente, después de las versiones actuales de .NET Framework 4.5.1 y Visual Studio 2013, incluida la funcionalidad "One ASP.NET", finalmente pueden alejarse de estas limitaciones técnicas/codificación. Por supuesto, tener archivos estándar nunca compartidos es esencial como con los directorios actuales * .config, APP_Code y APP_Data. Pero esta lógica debe ubicarse en un archivo de configuración en alguna parte (la configuración de la máquina es la predeterminada) para que pueda ser anulada. Además, estos nombres predeterminados de páginas comunes deben ser configurables (Diseño/Error/etc ...). –

7

Las páginas que no pueden mostrarse mediante solicitudes directas de su navegador (páginas maestras, vistas parciales, etc.) tienen guiones bajos (_) al comienzo de sus nombres.

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 pueden examinarse como páginas independientes, en el motor Razor view.

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

+3

¿Pero con esa lógica no TODOS los archivos cs y cshtml tendrían el prefijo con un guión bajo? – richb

+0

si todos los archivos tienen _ como un prefijo, entonces su sitio no funcionaría ... los archivos que tienen _prefix se representan dentro de una página normal ... (para los parciales), y el sitemaster es una plantilla ... por lo tanto, debe tener contenido para ser mostrado. – Juztin

+0

Así que lo intenté y IIS en mi caja no muestra ningún archivo del directorio Vistas. Ni siquiera archivos .html estáticos. Entonces, realmente no creo que esta sea la respuesta. – richb

2

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 guión bajo identifica algo que debe significar para uso "privado", ya sea por una clase, o en este caso, otra plantilla.

13

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

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

+0

, esto es incorrecto, como se señala en la respuesta anterior: subrayado tiene una funcionalidad de seguridad. – iJungleBoy

+1

@iJungleBoy Ver la respuesta aceptada. para ASP.net MVC (de lo que se trata esta pregunta), no hay funcionalidad de seguridad. Consulte el archivo web.config en la carpeta Vistas que ya bloquea todos los archivos cshtml y aspx, guión bajo o no (configura 'System.Web.HttpNotFoundHandler' para ellos). –

1

No uso MVC, pero con páginas web que también usan la sintaxis de la navaja, el prefijo _ generalmente indica que la página no debe ser accesada por un usuario sino por otras páginas o algún código. Si intenta navegar a una página que contiene el _prefix, asp.net evitaría el acceso a él. Es por eso que se usa con páginas de diseño y otras páginas similares, ya que el usuario no debe acceder directamente a ellas.

Algo así como la carpeta App_Code en asp.net

+0

@MikeBrind No puede 'navegar' directamente a/explorar * cualquier * de las vistas bajo '/ view' en un proyecto ASP.NET MVC predeterminado; el archivo '/ views/web.config' está configurado para prevenirlo. Pero no hay * nada * para evitar que una acción del controlador devuelva 'View (" _ Index ", modelo);' Funciona bien; Acabo de hacerlo cambiando el nombre de una vista a _Index.cshtml y cambiando la acción para llamar como lo hice anteriormente. –

+0

@MikeBrind Esta pregunta es sobre MVC, no páginas web. Concedido; No lo especifiqué en mi comentario original. –

+0

@MikeBrind Estaba respondiendo a * esta * respuesta. No es tuyo. Mi comentario inicial fue engañoso (también mencioné "parciales"), así que lo he eliminado. Mi punto era y es que los guiones bajos no tienen * nada * que ver con no poder cargar una vista en MVC. Este usuario incluso comenzó a decir "No uso MVC", pero esta pregunta fue sobre MVC.Solo me estoy asegurando de que alguien que viene después leyendo * esta * respuesta de alguna manera no piense que en MVC, un guión bajo afecta la capacidad de una acción del controlador para cargar una vista. No es gran cosa. Estamos de acuerdo en que no fui sincero en la forma en que hablo. Hecho. –

Cuestiones relacionadas