最近在做一个商场系统,分享一下自己做的购物车
购物车是用数据库实现的,当然也能用cookie实现
项目是基于三层实现,学生党表示还不会MVC
大概的思想就是----先读取出用户数据库中的购物车的商品,输出到前台,前台如果有购物车数量修改就通过异步提交给一般处理程序完成数量的更新
刚刚接触异步,大佬轻喷
Carts.cs
1 public class Carts 2 { 3 4 ///5 /// 购物车ID 6 /// 7 public int cartId { get; set; } 8 ///9 /// 用户ID10 /// 11 public int userId { get; set; }12 ///13 /// 产品ID14 /// 15 public int productId { get; set; }16 ///17 /// 产品数量18 /// 19 public int productCount { get; set; }20 ///21 /// 添加时间22 /// 23 public DateTime addTime { get; set; }24 25 }
前台页面
Cart.aspx
1
商品名称 | 6积分 | 7金额 | 8优惠 | 9数量 | 10操作 | 11
17 18 19 <%= item.productName %> 20 21 | 22 <%=item.productStone %> | 23¥<%= item.productPrice.ToString("0.00") %>24 | 25减¥0.00 | 2627 28 ,<%=item.userId %>,this.value);">29 <%-- href="/handler/cartUpdate.ashx?id=<%=item.cartId %>&user=<%=item.userId %>&count=<%=item.productCount%>&type=add" --%>30 ,<%=item.userId %>,<%=item.productCount %>,'add')">31 ,<%=item.userId %>,<%=item.productCount %>,'reduce')">32 33 | 34删除 | 35
40
51 41 42
48 43
46 47 件商品 总计:¥
44 返现:-¥0.00
45 总计(不含运费): ¥
49 50 前台jquery脚本
1 //防止数量文本框内有非数字值 2 function CheckValue(obj) { 3 var v = obj.value.replace(/[^\d]/g, ''); 4 if (v == '' || v == 'NaN') { 5 obj.value = "1"; 6 } 7 else { 8 obj.value = v; 9 }10 }11 12 //计算总金额13 function setTotal() {14 var sum = 0;15 var count = 0;16 $("#tab tr").each(function () {17 if (!isNaN(parseInt($(this).find('input[class*=text_box]').val()))) {18 sum += parseInt($(this).find('input[class*=text_box]').val()) * parseFloat($(this).find('.orange-font').text());19 count += parseInt($(this).find('input[class*=text_box]').val());20 }21 });22 $(".totalPrice").html(sum.toFixed(2));23 $(".totalCount").html(count);24 25 }26 setTotal();27 28 //异步更新购物车29 function update(obj, cid, user, pcount, select) {30 var json = { id: cid, userid: user, count: pcount, type: select };31 $.post("/handler/cartUpdate.ashx", json, function (data) {32 if (data > 0) {33 $(obj).parent().find("input[type=text]").val(data);34 setTotal();35 }36 })37 }
后台
Cart.aspx.cs
1 protected IEnumerableCartList { get; set; } 2 3 CartsBLL cartsBLL = new CartsBLL(); 4 CartInfoBLL InfoBLL = new CartInfoBLL(); 5 ProductsBLL productsBLL = new ProductsBLL(); 6 protected void Page_Load(object sender, EventArgs e) 7 { 8 //CookieHelper.Set("user_carts", "[{\"BookId\":\"4995\",\"Count\":\"1\"},{\"BookId\":\"4996\",\"Count\":\"2\"}]", DateTime.Now.AddDays(10)); 9 var item = Request["item"];10 if (CurrentUser != null)11 {12 if (!string.IsNullOrEmpty(item))13 {14 // 添加购物车15 AddCart(item.ToInt32());16 }17 18 // 代码执行顺序19 CartList = InfoBLL.QueryList(-1, -1, new { userId = CurrentUser.userId }, "cartId", true);20 21 }22 else23 {24 // 离线购物车25 }26 }27 28 private void AddCart(int item)29 {30 // 执行添加购物车逻辑31 if (item == 0)32 {33 NotFound();34 return;35 }36 37 // 判断商品是否存在38 var exist = productsBLL.QuerySingle(item);39 if (exist == null)40 {41 NotFound();42 return;43 }44 // 有商品 判断当前商品是否在购物车中存在45 // 查询用户的购物车46 var userCart = cartsBLL.QueryList(-1, -1, new { userId = CurrentUser.userId }, "cartId");47 // 查询用户购物车是否存在该商品48 var cartExist = userCart.ToList ().Find(p => p.productId == item);49 if (cartExist == null)50 {51 // 没有52 cartExist = new Shop.Model.Carts();53 cartExist.productId = item;54 cartExist.productCount = 1;55 cartExist.userId = CurrentUser.userId;56 cartExist.addTime = DateTime.Now;57 cartsBLL.Insert(cartExist);58 59 }60 else61 {62 //有63 cartExist.productCount += 1;64 cartsBLL.Update(cartExist);65 }66 67 68 }
异步处理程序
CartUpdate.ashx
1 public void ProcessRequest(HttpContext context) 2 { 3 context.Response.ContentType = "text/html"; 4 int cartid = context.Request["id"].ToInt32(); 5 int userid = context.Request["userid"].ToInt32(); 6 int count = context.Request["count"].ToInt32(); 7 string type = context.Request["type"]; 8 9 10 BLL.CartsBLL cartsBLL = new BLL.CartsBLL();11 Model.Carts cart = cartsBLL.QuerySingle(cartid);12 if (cart == null)13 {14 context.Response.Write("-1");15 context.Response.End();16 }17 if (type == "add")18 {19 //执行添加操作20 cart.productCount++;21 }22 else if (type == "reduce")23 {24 //执行减少操作25 if (cart.productCount > 1)26 {27 cart.productCount--;28 }29 else30 {31 context.Response.Write("-1");32 context.Response.End();33 }34 }35 else36 {37 //将数量修改为文本框失去焦点时的数量38 if (count > 0)39 {40 cart.productCount = count;41 }42 43 }44 cartsBLL.Update(cart);45 context.Response.Write(cart.productCount);46 }