2010-11-22 52 views
9

我正在为ASP.NET MVC中的未经身份验证的用户实现一个简单的会话购物车,我想正确地做到这一点。购物车会话状态在ASP.NET MVC中完成

在过去,我一直将购物车ID存储在持久性Session["CartID"]商店中并作为cookie。无论何时需要显示购物车,我都会从我的CartsCartItems表中查找用户的购物车项目。但在我知道一个更强大的类型的方法会更干净。

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

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

回答

4

史蒂夫·桑德森,在他的书临ASP.NET MVC 2框架,给人的一个很好的例子如何实现在ASP.NET MVC中使用会话的购物车。如果你没有这本书,你可以读一读here。这是一个非常简洁的方法。这个想法是创建一个模型绑定器,从会话中获取购物车。使用购物车的操作将使购物车通过模型活页夹“注入”。当您测试这些方法时,您的测试应该负责将购物车传递给该操作。

0

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

第一个例子我在谷歌发现: 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

这只是一个像“int”pageSize = Session [“SpaceController!Index!PageSize”] == null这样的“脏”代码的会话状态的模拟实现。 10:Convert.ToInt32(Session [“SpaceController!Index!PageSize”]);`是否有一种经过尝试和测试的更清晰,强类型的方法? – 2010-11-22 19:15:03

+0

你如何嘲笑你。如何强制输入会话访问权限取决于您。会话依赖于字符串键并存储对象。你将不得不在某些时候与那些人一起工作。我想指出Asp.net MVC的主要区别。 – jfar 2010-11-22 19:17:26