Variable Session en MVC
La variable Session en Mvc ASP.NET es muy utilizada e interacciona con las cookies, ya que guarda todo tipo de información, no debe confundirse con las cookies, ya que estas guardan información en el navegador y la Session almacena su información en la memoria del servidor y es única para cada usuario.
Hay que tener en cuenta que esta variable guarda la información hasta que se termina la sesión del usuario.
Esta variable suele utilizarse para carros de la compra y en ellas no debe guardarse mucha información.
Para que todos entendamos el funcionamiento de esta variable de forma sencilla, se trata de una aplicación con una lista de libros cargada desde una base de datos, los cuales puedes añadir a una lista de tus libros favoritos a partir de un enlace.
- Crear un proyecto de tipo Aplicación Web ASP.NET(.NET Framework)
2. Hay que elegirlo vacío y de tipo MVC
3. Como lo voy a hacer con una base de datos será necesario implementarla con una tabla como la siguiente
4. Para enlazar la base de datos con nuestro proyecto tendremos que añadir una nueva conexión en nuestro explorador de servidores
5. En esta pantalla hay que poner el Localhost, en mi caso tengo autenticación de Windows y no tengo que identificarme y debajo elegiremos nuestra base de datos de los libros.
6. En las propiedades de la conexión que hemos creado se encuentra nuestra cadena de conexión, la cual tendremos que copiar
Y pegar en nuestra connectionStrings del web.config, poniendole un nombre como por ejemplo “cadenalibro”
7. Como voy a utilizar Entity Framework tendremos que instalar dicho NuGet
8. Nuestra distribución de carpetas será la siguiente
9. Lo primero será crear sobre Models una clase llamada Libro, en la que crearemos el modelo Entity Framework desde la tabla de base de datos, y contendrá lo siguiente:
10. Ahora tendremos que crear el contexto Libros sobre Models también, esta clase es la que une la base de datos con nuestro proyecto y debe heredar de la clase DbContext, por lo que tendremos que hacer un using System.Data.Entity;
11. Sobre la carpeta Repositories crearemos la clase RepositoryLibros, que será la que contiene los métodos que necesitaremos realizar para el funcionamiento de nuestro ejercicio.
Primero habrá que crear una instancia a nuestro context, y crear el constructor RepositoryLibros() para después poder utilizarlo.
El método List<Libro>GetLibros() lo utilizaremos para poder listar todos nuestros libros, y lo retornamos llamando a nuestro context.
El método List<Libro>BuscarLibro(List<int>codigos) lo vamos a utilizar para buscar el libro en concreto el cual queremos añadir en nuestra lista de favoritos, lo haremos con una consulta de LinQ
12. Al terminar los métodos que necesitamos, sobre la carpeta Controller crearemos un controller llamado LibrosController, compuesto por un constructor y dos GET.
En nuestro Controller tenemos que crear una instancia a nuestro RepositoryLibros incluyéndole en nuestro constructor LibrosController() para poder utilizarlo.
El primer get será ListadoLibros en el cual crearemos una lista con todos nuestros libros.
Para ello le pasamos un id como parámetro, el cual preguntaremos si no es nulo, si es así crearemos una lista llamada codigoLibro que almacenará todos los id que queramos añadir a nuestra Session.
Entonces preguntaremos si nuestra Session es nula, si lo es la lista codigoLibro se reiniciará y sino almacenaremos en codigoLibro la Session como una lista.
Y el ViewBag.Favoritos lo utilizaremos para preguntar en la vista si la Session es nula o contiene un id.
Y el segundo que será LibrosFavoritos al que también pasaremos el id como parámetro.
Crearemos una lista llamada códigos que contendrá una lista de nuestra Session.
Si el id es distinto de nulo eliminaremos el código con dicho id.
Si la lista códigos esta vacía la Session será nula y sino la Session está compuesta por la lista códigos.
Si la Session no es nula, crearemos una Lista de la clase Libro, compuesta por los libros que añadamos a partir de nuestro método BuscarLibro y devolvemos la lista de favoritos.
13. Una vez creado el controller con sus respectivos métodos ya solo quedaría crear las vistas, las cuales haremos con scaffolding de la siguiente manera.
Sobre el ListadoLibros del controller haremos clic sobre botón derecho y daremos a Agregar Vista
Entonces en Template tendremos que poner List y sobre Model class debemos poner Libro (LibrosSession.Models) y añadimos
Al hacerlo con scaffolding nos lo crea todo automáticamente, lo único que habría que añadir es el @Html.ActionLink(«Añadir a favoritos», «ListadoLibros», «Libros», new { id = lib.IdLibro }, null)
En el cual mandaremos como parámetro el id del libro.
Y añadir la imagen si la Session no es nula, para sustituirla por el enlace una vez este añadido el libro a nuestra lista de favoritos
Lo mismo haremos sobre LibrosFavoritos añadiendo @Html.ActionLink(«Quitar de favoritos», «LibrosFavoritos»,»Libros», new { id = lib.IdLibro }, null), también mandando el id como parámetro para así poder eliminarlo
El resultado de la vista ListadoLibros será el siguiente:
Para añadir libros a LibrosFavoritos solo tendremos que hacer clic sobre el enlace, y nos saldrá la imagen indicando que ya esta añadido
Para ir a la lista de LibrosFavoritos haremos clic sobre el enlace Mis favoritos
Y ya tendríamos nuestra lista de LibrosFavoritos
Al igual que podemos añadirlos también podremos quitarlos, si dejamos la lista vacía nos indicará que no hay libros en nuestra lista
En caso de tener algún error, como que no cargue la Session o no elimine, lo mejor es visitar la propia página de Microsoft
https://docs.microsoft.com/en-us/previous-versions/ms178581(v=vs.140)
Autor: Paula María Bermúdez de la Puente Diéguez
Curso: Microsoft MCSA Web Applications + Microsoft MCSD App Builder + Xamarin
Centro: Tajamar
Año académico: 2018-2019
Código / recursos utilizados / Otros datos de interés: https://github.com/PaulaBermudez/LibrosSession