ActionLink y RedirectToAction para áreas en ASP.NET MVC

En las últimas entradas de este blog estuvimos viendo distintos puntos asociados a los helpers en ASP.NET MVC. Uno de los puntos importantes que vimos en “Helpers en ASP.NET MVC, reutilizando código en nuestras vistas” es el poder quitar código repetitivo o simplificar ciertas operaciones.

Allí recordé el comentario que había dejado @maxilovera en la entrada “Áreas en ASP.NET MVC – Una forma de organizar nuestras aplicaciones“:

Solamente hay que acordarse del parámetro de @area en los links para no volverse loco con las redirecciones. Aquí podría armarse un helper para facilitar la codificación

Este comentario venía a raíz de que para el Html Helper ActionLink como para las redirecciones (método RedirectToAction en los controladores) usando áreas, debíamos acordarnos de establecer como un atributo diferenciado el área a usar:

Area - ActionLink
Ejemplo de uso de áreas en el armado de un link
Area - RedirectToAction
Ejemplo de uso de áreas en la redirección

Esto puede ser propicio a olvidarnos de declarar ese atributo, además de que es algo repetitivo a realizar constantemente. Así que veamos cómo mejorar la situación con lo aprendido en los post’s anteriores.

Lo primero que vamos a definir es que para esta solución utilizaremos los Html Helpers, extendiendo lo ya definido en el namespace Html. Para ello crearemos el helper de la siguiente forma:

HelperAreas - HelperActionLink
Helper extendiendo ActionLink para áreas

Como podemos ver, recibimos los parámetros mínimos necesarios para armar el link, y en la ejecución del método invocamos al método ActionLink por defecto, tal cual lo haríamos en la vista. Solo que lo hacemos en un solo lugar, logrando abstraernos de esa definición, además de reutilizar la funcionalidad por defecto de ASP.NET MVC. A su vez aquí hicimos solo una sobrecarga de este método, podríamos agregar todas las que necesitemos (por ejemplo otra donde pasemos atributos HTML).

Para hacer una prueba del mismo vamos a agregar links hacia acciones de nuestras áreas usando esta nuevo Html Helper que hemos creado:

HelperAreas - UsoHelper
Uso del Html Helper creado

Si ejecutamos nuestra aplicación podremos ver que el link se genera de la forma deseada (recuerden revisar el post Crear Html Helpers en ASP.NET MVC para un detalle de cómo configurar nuestros Html Helpers para luego poder usarlos):

HelperAreas - ResultadoHelper

Así que el primer punto lo tenemos cubierto 🙂

Ahora veamos cómo hacer con el segundo.

Aquí puede haber distintas variantes o ideas a implementar, la que les comento me parece una sencilla y prolija en su implementación. Básicamente la propuesta es crear una clase BaseController, la cual herede de Controller. Luego deberemos hacer que nuestros controladores en general no hereden de Controller sino de BaseController. Esto nos permitirá tener un lugar donde creemos nuestros métodos compartidos que se usarán en todos los controladores sin perder la funcionalidad nativa. En esta nueva clase definiremos nuestro método de sobrecarga a RedirectToAction, el cual internamente realiza la invocación al método nativo de ASP.NET MVC:

HelperAreas - SobreCargaRedirect

Aquí estamos usando los mínimos parámetros necesarios para hacer la redirección, al igual que en el punto anterior podremos agregar todas las sobrecargas que consideremos necesarias.

Finalmente lo usaremos de la siguiente forma:

HelperAreas - UsoRedirect

Como se puede apreciar, nuestro controlador está heredando de BaseController y por lo tanto tenemos la funcionalidad nativa de la clase Controller además de lo propio que hayamos agregado.

Y con esto tenemos dos alternativas totalmente válidas para facilitar las operaciones asociadas a redirecciones y armado de links con Html Helpers en nuestras aplicaciones ASP.NET MVC que usen áreas, extendiendo siempre funcionalidad nativa y unificando invocaciones algo repetitivas.

Espero que les sea útil, gracias por leer!

Anuncios

Un comentario en “ActionLink y RedirectToAction para áreas en ASP.NET MVC

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