¿La sintaxis de Razor proporciona una ventaja convincente en el marcado de la interfaz de usuario?

88

Me he dado cuenta de Scott Guthrie está empezando a hablar de la maquinilla de afeitar un poco justo en su blog, pero yo no estoy tan seguro de que es una buena opción para mi estilo.

De acuerdo, es un estilo bastante desconocido para alguien que está bastante acostumbrado a un tipo "estándar" de marcado ASP.Net (marcadores de posición de contenido y código en línea), pero me parece que hay muchas páginas adicionales para administrar y un marcado menos claro.

¿Cuáles son los sentimientos de otras personas al respecto? ¿Es algo que cree que debería considerarse seriamente al crear un andamio de nuevas páginas MVC o simplemente está tratando de resolver un problema que no existe?

Phil.Wheeler
fuente
3
De hecho, pensé que la sintaxis es fácil para alguien que esté familiarizado con el motor de visualización normal. Simplemente use @ en lugar de <% y no cierre sus nuggets de código ...
Jaco Pretorius
Puedes probar este convertidor . Para obtener más información, consulte esta publicación de blog .
George K

Respuestas:

153

[Descargo de responsabilidad: soy uno de los desarrolladores de Microsoft en MVC y Razor, por lo que podría ser un poco parcial :)]

Diseñamos Razor para que sea un lenguaje de plantillas conciso que utiliza solo la cantidad mínima necesaria de caracteres de control. Yo diría que gran parte de sus puntos de vista se pueden expresar con menos caracteres que el mismo código utilizando la sintaxis "tradicional" de WebForms.

Por ejemplo, el siguiente fragmento de código en sintaxis ASPX:

<% if(someCondition) { %>
  <ol>
  <% foreach(var item in Model) { %>
     <li><%: item.ToString() %></li>
  <% } %>
  </ol>
<% } %>

Se puede expresar de la siguiente manera en Razor:

@if(someCondition) {
   <ol>
   @foreach(var item in Model) {
      <li>@item.ToString()</li>
   }
   </ol>
}

Mientras que la versión ASPX tiene 21 caracteres de transición ( <%y %>), la versión Razor tiene solo tres ( @)

Diría que las ventajas de Razor son las siguientes:

  1. Sintaxis concisa, que es muy similar a la forma en que escribe código C # normal (consulte la siguiente publicación de blog reciente de Phil Haack que compara Asxp con la sintaxis de Razor: http://haacked.com/archive/2011/01/06/razor- syntax-quick-reference.aspx )
  2. Codificación HTML automática de la salida (que ayuda a protegerte de los ataques de inyección de HTML)
  3. Validación integrada (aunque no al 100%) de su marcado que lo ayuda a evitar etiquetas desequilibradas

Los conceptos relacionados con la página también se asignan fácilmente a lo que tiene en ASPX

  • Como puede ver, el código en línea todavía está permitido
  • Las secciones (que pueden ser opcionales) son equivalentes a los marcadores de posición de contenido
  • Páginas de diseño en lugar de páginas maestras
  • Los conceptos de vista total y parcial son los mismos
  • @functions { ... } bloques en lugar de <script runat="server"> ... </script>

Además, Razor tiene una serie de conceptos útiles que yo diría que son mejores que los que están disponibles en ASPX:

  • @helper funciones para la creación realmente fácil de funciones que emiten marcado
  • @modelpalabra clave para especificar el tipo de modelo de su vista sin tener que escribir una <%@ Page ...directiva con el nombre completo de la clase

Me gustaría pensar que hemos abordado un problema real, que es permitirle escribir más fácilmente vistas concisas y que cumplan con los estándares y, al mismo tiempo, proporcionarle formas de refactorizar el código común.

Por supuesto, no todo el mundo preferirá la sintaxis, por lo que también apoyamos completamente el motor de visualización ASPX. Además, puede consultar Spark y NHaml, que son dos motores de visualización de terceros que disfrutan de un seguimiento significativo de la comunidad. La siguiente publicación de blog tiene una buena comparación de las diferentes ofertas: http://blogs.msdn.com/b/coding4fun/archive/2010/10/04/10070953.aspx

maridar
fuente
7
Gracias por una respuesta realmente clara y completa. Esto cambia mis opiniones lo suficiente como para darle a Razor una oportunidad decente.
Phil.Wheeler
2
Aaron, puedes mezclar y combinar Razor y Aspx juntos, de modo que si quisieras, podrías convertir tu proyecto una página a la vez (el único inconveniente es que tendrías que duplicar tus páginas maestras en formato Razor porque tener una vista Razor usa una aspx master page no es compatible)
marcind
1
¿Cómo pones un signo @ en tu HTML? por ejemplo <a href="mailto:[email protected]">?
Chris S
9
@Chris Escape it:@@
BrunoLM
6
Como actualización de esta publicación, he estado usando Razor durante los últimos tres o cuatro meses y, habiéndome acostumbrado, no creo que pueda volver cómodamente al marcado ASP.Net tradicional.
Phil.Wheeler
3

Personalmente, aprecio mucho la reducción en la cantidad de caracteres de escape que se utilizan. El uso se <% %>vuelve muy tedioso en comparación con @{}y no es tan atractivo sintácticamente.

Además, escribir una definición completa para el código subyacente y la página se simplifica a una sola @model model.

Como también señaló Marcind, no tener que incluir siempre runat=serveres muy agradable también.

En general, realmente aprecio el uso del motor Razor y creo que no solo me facilita el desarrollo de las cosas, sino que también hace que el código sea más fácil de leer.

Travis J
fuente