Asp.Net Mvc购物车在购物车中存储所选物品的最佳方法

Kur*_*ula 1 asp.net-mvc shopping-cart

我想在Asp.Net Mvc3中创建一个购物车应用程序.我很困惑,在将用户选择的项目临时存储到购物车时采取正确的决定.什么是临时存储购物车物品的最佳方法,直到结账过程.

  1. 数据库中的临时表?签出项目后删除表格
  2. 会议?
  3. TempData的?
  4. Jquery数组?
  5. 还有其他方式吗?

请建议.

Rom*_*kin 7

据我了解,您有两种类型的用户:

  • 经过身份验证
  • 未经过身份验证

还有更多场景:

  • 购买后,用户可以进行身份​​验证.
  • 用户可以在过程中间验证自己(将一个项目添加到购物车,然后进行身份验证,然后再添加一个项目)
  • 用户已通过身份验证,并且已经可能在购物车中有某些内容(例如,昨天添加了一个项目).
  • 用户未经过身份验证,但可能已经在一个月前添加了购物车中的商品(您不想错过它,对吧?)

所以我认为最好的方法是将实体User链接到与这样的实体Cart链接的实体Item:

User <--- one-to-one ---> Cart <--- one-to-many ---> Item
Run Code Online (Sandbox Code Playgroud)

我建议使用以下方法.每当用户点击页面上的"添加到购物车"按钮时,您的javascript代码必须:

  1. 从cookie获取变量(例如,cart_id)
  2. 如果找不到cart_id,请通过ajax call(/Cart/GetNewId)获取新的cart_id ,并将此变量添加到cookie.
  3. 通过ajax call(/Cart/AddItem)将项目添加到购物车

cart_id必须是Guid.

这种方法有几个好处:

  • 在客户端上,您只保留cart_id.
  • 如果客户端关闭浏览器,他可以在几天,几个月或几年内返回(取决于cookie设置)
  • 您将所有重要信息保存在数据库中.它不依赖于服务器设置,您可以轻松地将服务器迁移到不同的托管服务提供商等.
  • 未对用户进行身份验证时,属性User(Cart实体内部)为null.当用户对自己进行身份验证时,您可以通过User仅设置属性轻松地将现有购物车与所有现有项目分配给用户.

等等

你的问题的答案看起来更接近你的" 数据库中的临时表?一旦项目被检出就删除表 ".而且,它更自然.在商店里想象自己,你有一个临时购物车,你可以在商店里走路时将物品放入这个购物车,最后付款,并在完成后从购物车中删除所有物品.

将此方法与Sessions进行比较:

  • 如果服务器出现故障,会话将丢失.您必须将SQL持久性用于会话.
  • 如果使用SQL,则必须使用aspnet_regsql.它将仅创建其他表以保留会话数据.就个人而言,我不喜欢他们,我想保持我的数据库清洁.我认为使用SQL持久性的会话太通用了.
  • 如果您尝试获取某些数据用于统计目的,则可能会变得很麻烦.通过我的方法,您可以轻松完成此操作.