Gracias a la variable Session se puede guardar información en la memoria del servidor y esto permite el paso de información entre las diferentes vistas o controladores, es útil por ejemplo para guardar productos en un carrito de la compra, crear listas de favoritos o almacenar información de usuario.

Las variables almacenadas son únicas para cada usuario. Es importante saber que la información guardada en Session se pierde cuando el usuario cierra la aplicación o transcurren 30 minutos de inactividad.

En este post voy a hacer una pequeña guia de ejemplo de Sessión mostrando unos productos de una base de datos SQL  y dando la opción de añadirlos a un carrito de la compra.

Paso 1-Crear un proyecto de Aplicación Web ASP.NET(.NET Framework)

1 Selecionamos MVC 2

Paso 2-Creamos la base de datos para añadir los productos

3 4

Paso 3-Vamos a instalar el NuGet de EntityFramework que es lo que utilizaremos para acceder a los datos

nugget

Paso 4-Agregamos la conexión a la base de datos desde el Explorador de servidores.

6

Paso 5-Buscamos la Cadena de conexión de la base de datos y la copiamos

7

Paso 6-Vamos a Web.Config en el Explorador de soluciones y creamos la conexión con connectionStrings, ahí copiamos la cadena de conexión y añadimos la contraseña al final si fuera necesario.

constring

Paso 7-En la carpeta de Models agregamos una class llamada Producto en la que incluiremos el modelo EntityFramework con los datos de nuestra tabla SQL

9 10

Paso 8-Creamos la carpeta Data y añadimos la class ContextoProducto, esta clase une la base de datos con el proyecto y tiene que heredar de la clase DbContext. Aquí estará el nombre de nuestra connectionString y el model productos

11

Paso 9-Ahora crearemos la carpeta Repositories con la clase RepositoryProducto donde añadiremos todas nuestras consultas LINQ a la BD para obtener los productos.

dasda

Creamos dos métodos para obtener una lista de productos (List), en el primero obtenemos todos los libros y en el segundo recogemos una lista de id´s donde irán todos los productos guardados y con where en la consulta buscamos los productos que tengan esas id.

Paso 10-Ahora vamos a crear el controller ProductoController

controller 13

En este controler creamos el actionResult de la vista ListaProductos. Por GET obtenemos las id de los productos que vayamos seleccionado, ponemos int? Para hacerlo nullable y permitir que al cargar la pagina no nos de error al no tener ningún producto seleccionado aun.

Preguntamos si existe algo en sesión, si no existe instanciamos la lista de numeros , si ya existe sesión recuperamos esta lista. Después añadimos el nuevo id a la lista y la lista en sesión.

Solo nos queda usar el método de nuestro repositorio para recuperar toda la lista de productos y enviarlo a la vista.

Paso 11-Vamos a crear el ActionResult para la vista del Carrito de la compra

controlercarrito

Obtenemos por GET la id para borrar productos. Cuando borramos un producto obtenemos la lista de números de sesión y borramos el producto elegido. Si sesión ya no tiene números entonces cerramos la sesión con null, si sigue teniendo números los añadimos de nuevo a sesión.

Después comprobamos hay algo en sesión para representar los productos si hay o enviar la vista vacía si no.

Paso 12-Por ultimo vamos a crear las views, primero la de ListaProductos

15

Recuperamos la List que le hemos enviado desde el model y lo representamos en una tabla. Lo mas importante del código es añadir en cada producto el ActionLink donde enviaremos el id por GET hacia el controller para añadirlo a sesión cuando hagamos click.

Paso 13-Y la ultima view, la de ProductosCarrito

16

Esta view es muy parecida a la anterior solo que cuando la sesión es null dibujamos un mensaje “No hay ningún producto en el carrito” e igual que antes creamos un actionlink enviando el id pero esta vez el controller eliminara los productos seleccionados.



Funcionamiento:

Seleccionamos los productos que queramos para añadirlos al carrito

17

En el carrito podemos ver los productos seleccionados y eliminarlos

18

Cosas a tener en cuenta:

Es MUY IMPORTANTE instanciar el contexto en RepositoryProductos y el repo en ProductoController

instanciarrepo instanciarcontexto

-No hay que olvidarse de añadir todos los usings que el proyecto nos vaya pidiendo




Autor/a: Jesus Saenz Jimenez

Curso: Microsoft MCSA Web Applications + Microsoft MCSD App Builder + Xamarin

Centro: Tajamar

Año académico: 2019-2020

Repositorio Github:

Carrito de la compra MVC con session / Github

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.