购物车会话状态在ASP.NET MVC中完成

时间:2010-11-22 18:31:59

标签: c# asp.net-mvc session shopping-cart strong-typing

我正在为ASP.NET MVC中未经身份验证的用户实现一个简单的会话购物车,我想做得对。

过去,我始终将购物车ID存储在持久性Session["CartID"]商店中,并作为Cookie存储。每当我需要显示购物车时,我都会从CartsCartItems表中查找用户的购物车商品。但在内部我知道更强类型的方法会更清晰。

在谷歌搜索最新的会话MVC之后,我找到了术语HttpSessionStateWrapper,这似乎是处理会话的可测试方式。但我没有找到任何好的教程或标准化的实现。也许这只是一个嗡嗡声,我应该坚持Session["..."]

在最新版本的ASP.NET MVC中使用会话实现购物车的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

Steve Sanderson在他的书“Pro ASP.NET MVC 2 Framework”中给出了一个很好的例子,说明如何使用ASP.NET MVC中的会话实现购物车。如果你没有这本书,你可以阅读here。这是一个非常巧妙的方法。我们的想法是创建一个模型绑定器,从会话中获取购物车。使用购物车的操作将通过模型绑定器“注入”购物车。在测试这些方法时,您的测试应负责将购物车传递给操作。

答案 1 :(得分:0)

MVC使用名为HttpContextBase的HttpContext类的可测试和可模拟的抽象。您根本不需要包装器,仍然可以对控制器进行模拟和单元测试。

我在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