Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 购物车会话状态在ASP.NET MVC中正确完成_C#_Asp.net Mvc_Session_Shopping Cart_Strong Typing - Fatal编程技术网

C# 购物车会话状态在ASP.NET MVC中正确完成

C# 购物车会话状态在ASP.NET MVC中正确完成,c#,asp.net-mvc,session,shopping-cart,strong-typing,C#,Asp.net Mvc,Session,Shopping Cart,Strong Typing,我正在ASP.NET MVC中为未经身份验证的用户实现一个简单的会话购物车,我希望这样做是正确的 过去,我总是将购物车ID存储在持久的会话[“CartID”]存储中,并作为cookie。每当我需要显示购物车时,我都会从我的购物车和购物车项目表中查找用户的购物车项目。但在内部,我知道更强类型的方法会更干净 在谷歌搜索最新的会话MVC内容后,我找到了术语HttpSessionStateWrapper,这似乎是一种处理会话的可测试方法。但我还没有找到任何好的教程或标准化的实现。也许这只是一个流行语,我

我正在ASP.NET MVC中为未经身份验证的用户实现一个简单的会话购物车,我希望这样做是正确的

过去,我总是将购物车ID存储在持久的
会话[“CartID”]
存储中,并作为cookie。每当我需要显示购物车时,我都会从我的
购物车
购物车项目
表中查找用户的购物车项目。但在内部,我知道更强类型的方法会更干净

在谷歌搜索最新的会话MVC内容后,我找到了术语
HttpSessionStateWrapper
,这似乎是一种处理会话的可测试方法。但我还没有找到任何好的教程或标准化的实现。也许这只是一个流行语,我应该坚持使用
会话[“…”]


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

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

我在谷歌上找到的第一个例子:
Steve Sanderson在其著作Pro ASP.NET MVC 2框架中给出了一个很好的示例,说明了如何在ASP.NET MVC中使用会话实现购物车。如果你没有这本书,你可以读一读。这是一个非常巧妙的方法。其想法是创建一个模型活页夹,从会话中取出购物车。使用购物车的操作将通过模型绑定器“注入”购物车。当您测试这些方法时,您的测试应该负责将购物车传递给操作。

这只是会话状态的模拟实现,使用“脏”代码,如
int pageSize=session[“SpaceController!Index!pageSize”]==null?10:Convert.ToInt32(会话[“SpaceController!Index!PageSize”])是否有一种经过尝试和测试的更干净、强类型的方法?如何模拟取决于您自己。会话访问的强类型取决于您。会话依赖于字符串键并存储对象。你必须在某个时候与他们合作。我想指出Asp.net MVC的主要区别。谢谢,这正是我想要的。@uvita我喜欢这个想法,但在会话中存储整个购物车不是一个坏主意吗?我在过去一直故意避免这样做,因为我们被告知要保持小规模的会议,但如果它得到了竖起大拇指,我会去的。也很好,谢谢。