2010-11-22 18 views
9

Estoy implementando un carro de sesión simple para usuarios no autenticados en ASP.NET MVC y quiero hacerlo bien.Estado de sesión de carrito de compra hecho correctamente en ASP.NET MVC

En el pasado siempre he almacenado el ID del carrito en la tienda persistente Session["CartID"] y como una cookie. Cuando necesite mostrar el carro, buscaré los artículos del carro del usuario en mis tablas Carts y CartItems. Pero por dentro sé que un enfoque más fuertemente tipado sería más limpio.

Después de buscar en Google la última sesión MVC, encontré el término HttpSessionStateWrapper, que parece ser una forma comprobable de tratar con sesiones. Pero no he encontrado buenos tutoriales ni implementaciones estandarizadas. Tal vez es solo una palabra de moda y debería seguir con Session["..."].

¿Cuál es la forma correcta de implementar un carrito de compras usando sesiones en la última versión de ASP.NET MVC?

Respuesta

4

Steve Sanderson, en su libro Pro 2 Marco de ASP.NET MVC, da un buen ejemplo de cómo implementar un carrito de la compra utilizando la sesión en ASP.NET MVC . Si no tiene el libro, puede hacerse una idea leyendo here. Es un enfoque muy limpio. La idea es crear un archivador modelo que tome el carrito de compras de la sesión. Las acciones que usan el carro de compras harán que el carrito sea "inyectado" por el encuadernador modelo. Cuando prueba esos métodos, sus pruebas deben ser responsables de pasar el carrito de compras a la acción.

+0

Gracias, esto es exactamente lo que estaba buscando. –

+0

@uvita Me gusta esta idea pero no está almacenando todo el carrito en sesión una mala idea? He evitado deliberadamente hacer esto en el pasado, ya que se nos dice que debemos mantener la sesión pequeña, pero si está mejorando, lo voy a hacer. Gran lectura también, gracias. –

0

MVC usa una abstracción comprobable y burlable de la clase HttpContext llamada HttpContextBase. No necesita el envoltorio y aún puede simular y probar sus controladores sin problemas.

primer ejemplo que se encuentran en Google: http://weblogs.asp.net/andrewrea/archive/2009/08/10/mocking-the-session-object-with-moq-inside-asp-net-mvc-and-having-a-clean-builder-method-for-session-values-in-the-controller.aspx

+0

Eso es solo una implementación burlona para el estado de la sesión con código "sucio" como 'int pageSize = Session [" SpaceController! Index! PageSize "] == null? 10: Convert.ToInt32 (Session ["SpaceController! Index! PageSize"]); '¿Hay una forma más limpia y fuertemente tipada que se haya probado y probado? –

+0

¿Cómo te burlas? Depende de ti. La forma en que escribe con fuerza el acceso a su sesión depende de usted. La sesión depende de las claves de cadena y almacena objetos. Tendrás que trabajar con ellos en algún momento. Quería señalar las principales diferencias en Asp.net MVC. – jfar

Cuestiones relacionadas