在ASP.NET MVC中正确处理购物车会话状态

9
我正在实现一个简单的ASP.NET MVC未经身份验证用户的会话购物车,我希望能够正确地完成它。
在过去,我总是将购物车ID存储在持久Session["CartID"]存储器和cookie中。每当我需要显示购物车时,我都会从我的CartsCartItems表中查找用户的购物车项目。但内心深处,我知道更强类型的方法会更加干净。
在谷歌搜索了最新的MVC会话内容后,我发现了术语HttpSessionStateWrapper,这似乎是处理会话的可测试方式。但我没有找到任何好的教程或标准化的实现。也许这只是一个流行词,我应该坚持使用Session["..."]
在最新版本的ASP.NET MVC中实现购物车使用会话的正确方法是什么?
2个回答

4

在他的书《Pro ASP.NET MVC 2 Framework》中,Steve Sanderson提供了一个很好的例子,介绍如何在ASP.NET MVC中使用会话实现购物车。如果你没有这本书,你可以通过这里了解一下。这是一个非常简洁的方法。其思路是创建一个模型绑定器,从会话中获取购物车。使用购物车的操作将由模型绑定器“注入”购物车。当您测试这些方法时,您的测试应该负责将购物车传递给操作。


@uvita,我喜欢这个想法,但是把整个购物车存储在会话中不是一个好主意吗?过去我故意避免这样做,因为我们被告知要保持会话小巧,但如果这个方法得到认可,我会尝试一下。阅读体验也很棒,谢谢。 - tinmac

0

这只是一个用“脏”代码模拟会话状态的实现,例如 int pageSize = Session["SpaceController!Index!PageSize"] == null ? 10 : Convert.ToInt32(Session["SpaceController!Index!PageSize"]);。有没有更干净、强类型的方法已经被尝试和测试过了? - Petrus Theron
你如何进行模拟取决于你自己。你如何强类型化你的会话访问也是由你自己决定的。会话依赖于字符串键并存储对象。在某些时候,你需要与它们一起工作。我想指出Asp.net MVC中的主要区别。 - John Farrell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接