martes, 16 de octubre de 2012

TempData y ViewData en MVC2

Cuando uno lleva mucho tiempo trabajando con el clásico paradigma de N capas planteado al estilo .NET y trata de ir al mundo del MVC (también de .NET) se encuentra con que las clásicas variables de sesión son poco usadas y en su lugar se usan TempData y ViewData. Aunque en un principio los nombres son algo descriptivos, estos mismos también son confusos, por lo que me han dado más de un dolo de cabeza al querer usarlo y más al tratar de entenderlos.
Antes de pasar a explicar el funcionamiento de cada uno de estos debo aclara que Session aún existe, ahora paso a la explicación.

TempData, ViewData y Session funcionan igual en lo que se refiere a la forma de guardar información, todo son pares key - value.
TempData guarda la información solo durante el Request actual y el siguiente, muy útil cuando necesitas pasar data en redirecciones a páginas de error.
ViewData guarda la información solo durante un Request, más específicamente durante el camino Vista - Controlador (y viceversa), muy útil para mostrar mensajes de confirmación.
Session sigue trabajando igual, guarda datos que están disponibles durante toda la sesión de cliente.


Saludos,
Giank

lunes, 15 de octubre de 2012

LinQ To SQL y los archivos dbml

Linq To Sql es un ORM ligero, con soporte para Linq (Tecnologia .NET) integrado. Un ORM es un componente de software que se encarga de hacer el mapeo de una BD relacional a clases/objetos.
Como en todo trabajo con .NET existe una herramienta visual para hacer este trabajo y es realmente útil, en unos minutos podemos tener toda nuestra BD, relaciones incluidas, mapeada en nuestro sistema sin mayor esfuerzo.
Los pasos para trabajar con LinQ to SQL son simples:
  • Se agrega al proyecto un archivo de clases de LinQ to SQL, extension dbml. 
  • En el explorador de servidores realizamos un conexión a la BD de nuestro sistema. 
  • Agregamos todas las tablas que necesitemos de nuestra al archivo dbml, esto se hace solo "jalando" las tablas al archivo. 
  • Nombramos nuestras tablas con los nombres que queramos que tengan las clases en nuestro sistema. 
  • y listo! 
Hecho esto ya tenemos mapeadas todas las tablas de BD que necesitemos para trabajar y gracias al poder de LinQ podemos hacer inserciones, modificaciones y eliminaciones de manera rápida y sin generar un solo caracter en Transact-SQL.

Saludos,
Giank

ActionLink a otro controlador

Siempre hay cosas nuevas que aprender y hoy he aprendido mucho de MVC2. Entre todo mi trajín del día, haciendo el proyecto de DSD, me topé con la necesidad de llamar a un controlador diferente al que manejaba una vista determinada. Busque un rato entre las sobrecargas del método ActionLink, pero no encontré nada que calzara al 100% con mi necesidad, al final me aventuré por un constructor con 5 parámetros y como no tenia idea de que pasarle al último le di un null.. y ¡ohh sorpresa!, funcionó; se hizo una llamada a un controlador diferente al asociado con la vista en la que trabajaba en ese momento. El constructor es este:

Html.ActionLink("TextoDelLink", "NombreDelAction", "NombreDelControlador", new { NombreParametro1 = Valor1, NombreParametro2 = Valor2, etc, etc }, null)

Como "bonus track" para este post, agrego que este método no reconoce entre sobrecargas de métodos en el controlador al que se llame.

Saludos,
Giank