2010-11-22 53 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