Crear Razor Helpers en ASP.NET MVC

Siguiendo lo visto en el post inicial sobre reutilización en nuestras vistas ASP.NET MVC y en el de Html Helpers en esta entrada veremos los Razor Helpers, la alternativa que nos permite realizarlo directamente desde nuestra vistas.

Lo primero que vamos a ver es la sintaxis del mismo. Al ser código Razor, el mismo deberá estar ubicado en una vista. La declaración es muy similar a una función, salvo que inicia con la palabra clave @helper, seguida del nombre del mismo y los parámetros que recibe. A la vez que su ámbito se define con corchetes. Luego el contenido es como si estuviéramos escribiendo una vista en Razor de forma normal.

Siguiendo con el ejemplo del post anterior vamos a ver cómo quedaría el helper en cuestión para renderizar una lista de elementos HTML con esta alternativa:

RazorHelpers - HelperEnVista
Sintaxis de un Helper Razor

Como se puede apreciar, es muy sencilla la escritura del mismo. Y el uso también lo es, veámoslo en la siguiente imagen:

RazorHelpers - UsoHelperEnVista

Al estar el helper en la misma vista que donde lo usamos hace que lo invoquemos sólo a través del nombre. Ahora ejecutemos la aplicación y veamos el resultado:

RazorHelpers - Resultado
Resultado de ejecución, con el mismo resultado que habiendo usado los helpers en C#

Excelente, ya lo tenemos funcionando! Y el resultado es exactamente el mismo que usando los Html Helpers en C#.

Ahora bien, en este ejemplo estamos interactuando con un helper creado y usado en la misma vista. Pero si nos ponemos a pensar, generalmente cuando necesitamos reutilizar código lo haremos a nivel general, en distintas vistas. Así que debemos buscarle algo adicional a este enfoque para poder lograr ese objetivo.

La verdad es que solo debemos hacer algunos cambios para poder lograr esto. Lo primero que haremos es crear la carpeta App_Code dentro de nuestro proyecto web, a la vez que dentro de la misma creamos una vista vacía con el nombre sobre el cual luego referenciaremos nuestros helpers. Para nuestro caso la vista se llamará OwnHelpers.cshtml:

RazorHelpers - AgregarParaCompartir

Luego de esto, sólo debemos quitar el helper que teníamos escrito en la vista donde lo usábamos y llevarlo a esa nueva vista, quedando de la siguiente forma el archivo OwnHelpers.cshtml:

RazorHelpers - HelperCompartido

Lo siguiente a realizar será cambiar el lugar donde se lo utiliza para que lo utilice. Como mencionaba anteriormente, debemos indicar el nombre de la vista antes del nombre del helper, siendo como una clase y método:

RazorHelpers - UsoHelperCompartido

A raíz de esto último que mencionaba, si vamos a la referencia de nuestro helper (método List) no nos encontraremos con nuestra vista Razor, sino que con una clase C# que contiene la lógica equivalente de lo que hemos escrito en nuestro helper:

RazorHelpers - ClaseGeneradaPorHelper
Código C# resultante de nuestro Helper Razor

Conclusiones

Finalizando esta serie de post’s sobre la reutilización en las vistas mediante el uso de helpers, podemos ver que tenemos alternativas válidas para poder lograr dicho objetivo. Entre los Html Helpers en C# y los hechos en Razor tenemos para poder elegir entre cuál de los dos usar.

Personalmente me inclino sobre los primeros para cuando nos queremos abstraer de la escritura de código HTML repetitivo, pero atómico de cierta forma. Esto es lo que ya pasa con los helpers que ya vienen por defecto, tienen el propósito de ayudarnos a no escribir código HTML repetitivo.

Con respecto a los helpers de Razor, serán más apropiados para los casos donde tengamos un comportamiento escrito con sintaxis Razor que estamos repitiendo en una o más vistas. Acá ya hablaríamos de cuestiones asociadas a sentencias condicionales, como podría ser que ante una lista vacía mostremos una leyenda de que no hay elementos.

Igual no hay una línea que divida el uso de una u otra alternativa, la decisión estará de nuestro lado teniendo en cuenta lo que deseamos lograr y el conocimiento de las ventajas que nos ofrece cada una.

Espero que esta serie les haya sido útil, cualquier consulta la comentan.

Gracias por leer!!

Anuncios

2 comentarios en “Crear Razor Helpers en ASP.NET MVC

  1. Muchas gracias Diego. Sola una preguntilla, ya que el uso de unos u otros helpers lo dejas a elección personal, solo preguntar si alguno de ellos en algún caso tiene mejor rendimiento respecto al otro, me imagino q salvo q sea algo muy grande no lo habrá. Muchas gracias

    Le gusta a 1 persona

    • Buenas Carlos, como siempre gracias por pasar por los posts!
      La verdad que es una muy buena pregunta, sinceramente no tengo la información certera para responder. A mi criterio no hay diferencia significativa de rendimiento entre uno y otro, ya que ambos terminan generando código compilado.
      Me parece que la diferencia entre la elección entre uno y otro va a ser en la comodidad del uso para lo que necesites armar. En estos días habrá un post donde justo veremos un ejemplo donde el Html Helper es la alternativa más apropiada, pero nuevamente será por el uso particular que haremos de la lógica involucrada.
      Saludos!

      Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s