在ASP.NET MVC实现购物车,尝试一种不同于平常的购物车显示方式

本文探讨了一种不同于传统方式的购物车显示方法,利用Bootstrap实现自适应布局。购物车页面包含产品明细、数量调整、小计、总计、清空购物车等功能。此外,还介绍了如何维护购物车类(包含添加、移除、计算总价等操作)和购物车页面Model,以及控制器中与购物车交互的方法。示例源码已上传至GitHub。
摘要由CSDN通过智能技术生成

通常,我们看到的购物车是这样的:

 

3

 

虽然这种购物车显示方式被广泛运用,但我个人觉得不够直观。如果换成这样呢?

 

2

 

本篇的源码放在了:https://github.com/darrenji/ShoppingCartInMVC

 

以上购物车页能实现的效果包括:
1、购物车明细:显示订购数量、总金额,清空购物车。
2、购物车内产品:数量可调整,对应的小计和总计动态变化。点击移除按钮移除该产品。
3、继续购物按钮:点击左下角的继续购物按钮,回到先前页。
4、使用了Bootstrap, 页面元素自适应,页面宽度调小时,页面布局动态变化。
5、每行放置4个产品,且允许高度不一致,第5个产品另起一行,且不会float到上一行的空白区域,如下图。

 

1

 

首先,有关产品的类。

 

 
 
    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string ImageUrl { get; set; }
        public string Description { get; set; }
        public decimal Price { get; set; }
    }

 

产品选购页如图:

 

4

 

以上,产品选购页是一个有关Product集合的强类型视图页,其对应的Model为:

 

 
 
    public class ProductsListVm
    {
        public ProductsListVm()
        {
            this.Products = new List<Product>();
        }
        public IEnumerable<Product> Products { get; set; }
    }

 

想像一下,我们在超市购物,在购物车内放着不同的商品对应不同的数量,在这里,可以把商品和数量抽象成一个类:

 

 
 
    public class CartLine
    {
        public Product Product { get; set; }
        public int Quantity { get; set; }
    }   

 

而购物车类实际上就是维护着这个CartLine集合,需要提供添加、移除、计算购物车总价、清空购物车等方法,并提供一个获取到CartLine集合的属性,另外,针对点击购物车页上的增量和减量按钮,也要提供相应的方法。

 

 
 
    public class Cart
    {
        private List<CartLine> lineCollection = new List<CartLine>();
 
 
        //添加
        public void AddItem(Product product, int quantity)
        {
            CartLine line = lineCollection.Where(p => p.Product.Id == product.Id).FirstOrDefault();
            if (line == null)
            {
                lineCollection.Add(new CartLine(){Product = product, Quantity = quantity});
            }
            else
            {
                line.Quantity += quantity;
            }
        }
 
 
        //点击数量+号或点击数量-号或自己输入一个值
        public void IncreaseOrDecreaseOne(Product product, int quantity)
        {
            CartLine line = lineCollection.Where(p => p.Product.Id == product.Id).FirstOrDefault();
            if (line != null)
            {
                line.Quantity = quantity;
            }
        }
 
 
        //移除
        public void RemoveLine(Product product)
        {
            lineCollection.RemoveAll(p => p.Product.Id == product.Id);
        }
 
 
        //计算总价
        public decimal ComputeTotalPrice()
        {
            return lineCollection.Sum(p => p.Product.Price*p.Quantity);
        }
 
 
        //清空
        public void Clear()
        {
            lineCollection.Clear();
        }
 
 
        //获取
        public IEnumerable<CartLine> Lines
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值