2010-12-08 26 views
23

acabo de leer en this blog postRazor Plantillas en ASP.NET MVC 3.ASP.NET MVC 3 Razor plantillas VS renderPartial

En pocas palabras, apenas no lo consigue!

Es decir, no veo por qué necesitamos este código (bastante) complicado para lograr lo que se puede hacer IMO más fácil (y más nítido) con @RenderPartial?

Esto es lo que no me gusta:

  1. La plantilla se almacena como delegado Func<T,HelperResult>?
  2. que el delegado plantilla se persistió en el ViewData controlador (por ejemplo HttpContext.Current.Items)

El único "beneficio" Leo de ese blog es que un archivo separado no es necesario para crear plantillas, lo que significa que no es necesario volver a compilar, etc.

Pero no veo eso como un argumento válido. Los archivos extra están bien siempre y cuando la organización de la solución no se vea comprometida.

Prefiero usar @RenderPartial, ya que puedo mantener mi marcado separado de la vista maestra, y puedo representar esto tanto en línea (tiempo de renderizado) como con jQuery (por ejemplo, evento AJAX).

Tal vez me falta algo aquí, pero ¿alguien puede dar algunas razones por las que debemos elegir Razor Templating sobre RenderPartial para crear contenido reutilizable?

Respuesta

19

Bien, debes preguntar al autor de esa publicación sobre su motivación para presentar esta técnica.

Ciertamente ilustra lo que es posible en Razor. Si deberías usarlo es una cuestión diferente. Personalmente creo que hay técnicas alternativas que son menos complicadas (estoy de acuerdo con sus puntos sobre el almacenamiento de un Func dentro del contexto de la solicitud).

  • Hay @RenderPartial que usted ya ha mencionado.
  • También puede utilizar la sintaxis @helper (ya sea como un ayudante local o un ayudante global)
  • Usted puede escribir un asistente de HTML (y utilizar TagBuilder a ensamblar la salida)
  • Se puede escribir una acción infantil
  • puede escribir un ayudante con plantilla

Ahora que miro la lista anterior Creo MVC podría proporcionar demasiada variedad :)

U pdate Para ilustrar mejor cómo las plantillas en línea pueden ser útiles, escribí una publicación en el blog sobre cómo usarlas para llamar a las secciones con el código predeterminado: Optional Razor Sections with Default Content.

Se puede utilizar para escribir algo como esto:

@this.RenderSection("OptionalSection", @<div>Default Content</div>) 
+0

Hahah. Libre pensamiento es el enemigo. Gracias @marcind. :) +1 – RPM1984

+0

Por curiosidad (solo preguntando desde que estás en el equipo de MVC), ¿tienes alguna idea de cuál fue la motivación para incluir las Plantillas Razor? Debe haber habido una necesidad/caso de negocios para ello. ¿O es simplemente para proporcionar una alternativa como dices? – RPM1984

+2

Bueno, nosotros (el equipo MVC) no proporcionamos "Plantillas Razor". Es solo una publicación de blog escrita por Imran. No estamos diciendo que esa es la forma en que debe escribir aplicaciones. Simplemente sucede que es posible hacer eso (debido a la forma en que funciona Razor). – marcind

3

Un error común acerca de la maquinilla de afeitar es que no puede ser utilizado fuera del contexto de la AEP.Net MVC framework. Es el escenario más común, sin embargo, el poder del motor de afeitar va más allá de eso.

Puede definir plantillas de afeitar en una aplicación de consola o incluso en una biblioteca. Como ejemplo simplificado, considere una aplicación que envía correos electrónicos automáticos HTML a los clientes. En los viejos tiempos, o bien recurrías a la concatenación de cadenas o a la transformación XSLT o algo más. De cualquier manera, no puede ver visualmente su marcado y la manipulación se convierte en una pesadilla de mantenimiento.

Con plantillas Razor, puede definir su plantilla como marcado HTML donde puede visualizarlo y probarlo fácilmente.

He aquí un excelente artículo que demuestra esta capacidad: http://www.west-wind.com/weblog/posts/2010/Dec/27/Hosting-the-Razor-Engine-for-Templating-in-NonWeb-Applications

Nota: No estoy diciendo que el enlace que señaló está mostrando esto, sólo un ejemplo de por qué usted quiere ir más allá de los métodos enumerados en la respuesta de @ marcind.

Cuestiones relacionadas