翼度科技»论坛 编程开发 .net 查看内容

[回馈]ASP.NET Core MVC开发实战之商城系统(五)

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。

 
购物车功能说明

 
在首页或者商品列表页面,如果用户对商品感兴趣,可以点击快捷方式,将商品加入购物车;或者在商品详情页面,选择对应的商品参数后,将商品加入购物车。商品加入购物车的渠道是有多种,而用户也可以对已经加入购物车的商品进行购买,或者删除购物车。每一个用户都有各自的购物车,相互之间独立,所以购物车功能需要用户先进行登录,才能查看。
 
购物车功能设计

 
根据购物车功能说明,购物车主要显示已添加的商品列表,并可以删除,或者选择商品进行购买,设计页面如下所示:

 
购物车功能开发

 
 
购物车主要展示用户选择的商品信息。
 
1. 数据表创建

 
购物车表EB_Cart主要用于存储商品信息,用户信息,数量,及个人喜好等内容,如下所示:

购物车表创建语句如下所示:
  1. CREATE TABLE [dbo].[EB_Cart](
  2.         [Id] [bigint] IDENTITY(1,1) NOT NULL,
  3.         [ProductId] [bigint] NULL,
  4.         [CustomerId] [bigint] NULL,
  5.         [Quantity] [int] NULL,
  6.         [Remark] [varchar](200) NULL,
  7.         [CreateTime] [datetime] NULL,
  8.         [CreateUser] [varchar](50) NULL,
  9.         [LastEditTime] [datetime] NULL,
  10.         [LastEditUser] [varchar](50) NULL
  11. ) ON [PRIMARY]
复制代码
 
2. 购物车实体创建

 
购物车实体和数据表结构保持一致,方便进行映射。如下所示:
  1. using SqlSugar;
  2. namespace EasyBuyShop.Models
  3. {
  4.     /// <summary>
  5.     /// 购物车
  6.     /// </summary>
  7.     [SugarTable("EB_Cart")]
  8.     public class Cart:EntityModel
  9.     {
  10.         public long ProductId { get; set; }
  11.         public long CustomerId { get; set; }
  12.         /// <summary>
  13.         /// 数量
  14.         /// </summary>
  15.         public int Quantity { get; set; }
  16.         public string Remark { get; set; }
  17.     }
  18. }
复制代码
 
3. 数据处理层DAL

 
购物车列表,主要包括添加购物车,删除,查询等功能,DAL层代码如下所示:
  1. using EasyBuyShop.Models;
  2. using EasyBuyShop.Utils;
  3. namespace EasyBuyShop.DAL
  4. {
  5.     public class CartDal:BaseDal
  6.     {
  7.         /// <summary>
  8.         /// 获取购物车列表
  9.         /// </summary>
  10.         /// <param name="userId"></param>
  11.         /// <returns></returns>
  12.         public List<Cart> GetCartListByUserId(long userId)
  13.         {
  14.             try
  15.             {
  16.                 using (var db = this.GetDb(BaseDal.ConnStr))
  17.                 {
  18.                     return db.Queryable<Cart>().Where(r => r.CustomerId == userId).ToList();
  19.                 }
  20.             }
  21.             catch (Exception ex)
  22.             {
  23.                 LogHelper.Fatal(ex.Message);
  24.                 return new List<Cart>();
  25.             }
  26.         }
  27.         public int DeleteById(long id)
  28.         {
  29.             try
  30.             {
  31.                 using (var db = this.GetDb(BaseDal.ConnStr))
  32.                 {
  33.                     int cnt = db.Deleteable<Cart>(r => r.Id == id).ExecuteCommand();
  34.                     return cnt;
  35.                 }
  36.             }
  37.             catch (Exception ex)
  38.             {
  39.                 LogHelper.Fatal(ex.Message);
  40.                 return -1;
  41.             }
  42.         }
  43.         public Cart GetCart(long id)
  44.         {
  45.             try
  46.             {
  47.                 using (var db = this.GetDb(BaseDal.ConnStr))
  48.                 {
  49.                     return db.Queryable<Cart>().First(r => r.Id == id);
  50.                 }
  51.             }
  52.             catch (Exception ex)
  53.             {
  54.                 LogHelper.Fatal(ex.Message);
  55.                 return null;
  56.             }
  57.         }
  58.     }
  59. }
复制代码
 
4. 控制器获取

 
控制器方法主要包括添加购物车【1.首页或商品列表快捷添加购物车 2.商品详情页面添加购物车】,查询购物车, 删除购物车,代码如下所示:
  1. using EasyBuyShop.DAL;
  2. using EasyBuyShop.Models;
  3. using Microsoft.AspNetCore.Mvc;
  4. namespace EasyBuyShop.Controllers
  5. {
  6.     /// <summary>
  7.     /// 购物车控制器
  8.     /// </summary>
  9.     public class CartController : Controller
  10.     {
  11.         /// <summary>
  12.         /// 购物车列表页面
  13.         /// </summary>
  14.         /// <returns></returns>
  15.         public IActionResult Index()
  16.         {
  17.             
  18.             var userId = HttpContext.Session.GetInt32("userid");
  19.             if (userId == null)
  20.             {
  21.                return Redirect("/Auth/login");
  22.             }
  23.             var cartDal = new CartDal();
  24.             var productDal = new ProductDal();
  25.             var cartList = cartDal.GetCartListByUserId((long)userId);
  26.             var products = productDal.GetProductListByIds(cartList.Select(r => r.ProductId).ToList());
  27.             ViewData["CartList"] = cartList;
  28.             ViewData["ProductList"]= products;
  29.             var username = HttpContext.Session.GetString("username");
  30.             var realName = HttpContext.Session.GetString("realname");
  31.             ViewData["Username"] = username;
  32.             ViewData["RealName"] = realName;
  33.             return View();
  34.         }
  35.         /// <summary>
  36.         /// 首页或商品列表,快捷加入购物车
  37.         /// </summary>
  38.         /// <param name="productId"></param>
  39.         /// <returns></returns>
  40.         [HttpPost]
  41.         public IActionResult Add(int productId)
  42.         {
  43.             Msg msg = new Msg();
  44.             var userId = HttpContext.Session.GetInt32("userid");
  45.             var userName= HttpContext.Session.GetString("username");
  46.             if (userId == null)
  47.             {
  48.                 msg.code = -1;
  49.                 msg.message = "尚未登录";
  50.                 return Json(msg);
  51.             }
  52.             var productDal = new ProductDal();
  53.             var product = productDal.GetProduct(productId);
  54.             if (product != null)
  55.             {
  56.                 var cartDal = new CartDal();
  57.                 var cart=new Cart();
  58.                 cart.ProductId = productId;
  59.                 cart.CustomerId = userId.Value;
  60.                 cart.Quantity = 1;
  61.                 cart.Remark= string.Empty;
  62.                 cart.CreateUser = userName;
  63.                 cart.CreateTime=DateTime.Now;
  64.                 cart.LastEditUser = userName;
  65.                 cart.LastEditTime = DateTime.Now;
  66.                 int id = cartDal.InsertT<Cart>(cart);
  67.                 if(id > 0)
  68.                 {
  69.                     msg.code = 0;
  70.                     msg.message = "成功";
  71.                     return Json(msg);
  72.                 }
  73.                 else
  74.                 {
  75.                     msg.code = -1;
  76.                     msg.message = "加入购物车失败";
  77.                     return Json(msg);
  78.                 }
  79.             }
  80.             else
  81.             {
  82.                 msg.code = -1;
  83.                 msg.message = "商品不存在";
  84.                 return Json(msg);
  85.             }
  86.             
  87.         }
  88.         /// <summary>
  89.         /// 商品详情页面加入购物车
  90.         /// </summary>
  91.         /// <returns></returns>
  92.         [HttpPost]
  93.         public IActionResult AddWithForm()
  94.         {
  95.             Msg msg = new Msg();
  96.             var userId = HttpContext.Session.GetInt32("userid");
  97.             var userName = HttpContext.Session.GetString("username");
  98.             if (userId == null)
  99.             {
  100.                 msg.code = -1;
  101.                 msg.message = "尚未登录";
  102.                 return Json(msg);
  103.             }
  104.             var productId =long.Parse( Request.Form["productId"]);
  105.             var quantity = int.Parse(Request.Form["quantity"]);
  106.             var color = Request.Form["color"];
  107.             var size = Request.Form["size"];
  108.             var remark = $"颜色:{color},大小:{size}";
  109.             var productDal = new ProductDal();
  110.             var product = productDal.GetProduct(productId);
  111.             if (product != null)
  112.             {
  113.                 var cartDal = new CartDal();
  114.                 var cart = new Cart();
  115.                 cart.ProductId = productId;
  116.                 cart.CustomerId = userId.Value;
  117.                 cart.Quantity = quantity;
  118.                 cart.Remark = remark;
  119.                 cart.CreateUser = userName;
  120.                 cart.CreateTime = DateTime.Now;
  121.                 cart.LastEditUser = userName;
  122.                 cart.LastEditTime = DateTime.Now;
  123.                 int id = cartDal.InsertT<Cart>(cart);
  124.                 if (id > 0)
  125.                 {
  126.                     msg.code = 0;
  127.                     msg.message = "成功";
  128.                 }
  129.                 else
  130.                 {
  131.                     msg.code = -1;
  132.                     msg.message = "加入购物车失败";
  133.                 }
  134.             }
  135.             else
  136.             {
  137.                 msg.code = -1;
  138.                 msg.message = "商品不存在";
  139.             }
  140.             return Redirect("/Cart/Index");
  141.         }
  142.         /// <summary>
  143.         /// 移除购物车
  144.         /// </summary>
  145.         /// <param name="Id"></param>
  146.         /// <returns></returns>
  147.         public ActionResult Delete(int Id)
  148.         {
  149.             var cartDal =new CartDal();
  150.             if(cartDal.DeleteById(Id) > 0)
  151.             {
  152.                 //成功
  153.             }
  154.             else
  155.             {
  156.                 //删除失败
  157.             }
  158.             return View();
  159.         }
  160.     }
  161. }
复制代码
 
5. 视图层展示

 
在Views/Cart/Index.cshtml购物车视图中,接收控制器传递的参数。如下所示:
  1. @{
  2.     var totalPrice = 0.0M;
  3. }
  4.    
  5.         
  6.         
  7.             <form action="/Purchase/BuyWithCart" method="post">
  8.                
  9.                     
  10.                         
  11.                            
  12.                                 <table>
  13.                                     <thead>
  14.                                         <tr>
  15.                                             <th >选择</th>
  16.                                             <th >图片</th>
  17.                                             <th >产品名称</th>
  18.                                             <th >价格</th>
  19.                                             <th >优惠价格</th>
  20.                                             <th >数量</th>
  21.                                             <th >总计</th>
  22.                                             <th >删除</th>
  23.                                         </tr>
  24.                                     </thead>
  25.                                     <tbody>
  26.                                         @{
  27.                                             var cartList = ViewData["CartList"] as List<Cart>;
  28.                                             var productList = ViewData["ProductList"] as List<Product>;
  29.                                             if (cartList.Count > 0)
  30.                                             {
  31.                                                 foreach (var cart in cartList)
  32.                                                 {
  33.                                                     var product = productList.FirstOrDefault(r => r.Id == cart.ProductId);
  34.                                                     totalPrice = totalPrice + (product.PreferentialPrice * cart.Quantity);
  35.                                                     <tr>
  36.                                                         <td >
  37.                                                             <input type="checkbox" value="@(cart.Id)" name="chkCart"  checked="checked" onchange="javascript:checkCartProduct(this);" />
  38.                                                         </td>
  39.                                                         <td >
  40.                                                             <a target="_blank" href="https://www.cnblogs.com/Product/Detail/@(product.Id)"><img src="https://www.cnblogs.com/@(product.ImageUrl)" alt="" width="100" height="100"></a>
  41.                                                         </td>
  42.                                                         <td >
  43.                                                             <a target="_blank" href="https://www.cnblogs.com/Product/Detail/@(product.Id)">@product.Name</a>
  44.                                                             <br />
  45.                                                             备注:@(string.IsNullOrEmpty(cart.Remark) ? "无" : cart.Remark)
  46.                                                         </td>
  47.                                                         <td >@(Math.Round(product.Price, 2))</td>
  48.                                                         <td >@(Math.Round(product.PreferentialPrice, 2))</td>
  49.                                                         <td >
  50.                                                             <input value="@(cart.Quantity)" type="number">
  51.                                                         </td>
  52.                                                         <td >@(Math.Round(product.PreferentialPrice * cart.Quantity, 2))</td>
  53.                                                         <td >
  54.                                                             <a target="_blank" href="https://www.cnblogs.com/Cart/Delete/@(cart.Id)">
  55.                                                                 <i ><font >删除</font></i>
  56.                                                             </a>
  57.                                                         </td>
  58.                                                     </tr>
  59.                                                 }
  60.                                             }
  61.                                             else
  62.                                             {
  63.                                                 <tr><td colspan="7">购物车暂无商品</td></tr>
  64.                                             }
  65.                                         }
  66.                                     </tbody>
  67.                                 </table>
  68.                            
  69.                         
  70.                     
  71.                     
  72.                         
  73.                         
  74.                         
  75.                            
  76.                                 <ul>
  77.                                     <li >总计@totalPrice</li>
  78.                                 </ul>
  79.                                 
  80.                                     
  81.                                     
  82.                                     
  83.                                         <input type="submit" value="购买"  onclick="javascript:return checkSubmit();"  />
  84.                                     
  85.                                 
  86.                            
  87.                         
  88.                     
  89.                
  90.             </form>
  91.         
  92.         
  93.    
  94.    
复制代码
 
购物车页面展示

 
运行程序,点击登录,在登录成功后,在右上角个人名称,点击下拉菜单,选择购物车,然后打开购物车页面,如下所示:

以上就是ASP.NET Core MVC开发实战之商城系统第五部分内容,后续将继续介绍其他模块,敬请期待。

来源:https://www.cnblogs.com/hsiang/archive/2023/08/03/17602215.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具