ASP.NET MVC实现横向展示购物车

  • Post category:C#

以下是ASP.NET MVC实现横向展示购物车的完整攻略:

实现横向展示购物车的步骤

实现横向展示购物车步骤包括以下几个步骤:

  1. 创建购物车模型。
  2. 在控制器中添加购物车操作方法。
  3. 在视中展示购物车。

以下是一个示例演示如何实现横向展示购物车:

  1. 创建购物车模型。

在“Models”文件夹中,创建一个名为“Cart”的新类,并添加以下代码:

public class Cart
{
    private List<CartItem> _items = new List<CartItem>();

    public void AddItem(Product product, int quantity)
    {
        var item = _items.FirstOrDefault(i => i.Product.Id == product.Id);

        if (item == null)
        {
            _items.Add(new CartItem { Product = product, Quantity = quantity });
        }
        else
        {
            item.Quantity += quantity;
        }
    }

    public void RemoveItem(Product product)
    {
        _items.RemoveAll(i => i.Product.Id == product.Id);
    }

    public decimal ComputeTotalValue()
    {
        return _items.Sum(i => i.Product.Price * i.Quantity);
    }

    public void Clear()
    {
        _items.Clear();
    }

    public IEnumerable<CartItem> Items => _items;
}

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

在上面的代码中,我们定义了一个名为“Cart”的购物车类,它包含了添加、删除、计算总价和清空购物车等操作。我们还定义了一个名为“CartItem”的类,它包含了产品和数量属性。

  1. 在控器中添加购物车操作方法。

在“Controllers”文件夹中,创建一个名为“CartController”的控制器,并添加以下代码:

public class CartController : Controller
{
    private readonly AppDbContext _dbContext;
    private readonly Cart _cart;

    public CartController()
    {
        _dbContext = new AppDbContext();
        _cart = new Cart();
    }

    public ActionResult AddToCart(int productId, int quantity)
    {
        var product = _dbContext.Products.FirstOrDefault(p => p.Id == productId);

        if (product != null)
        {
            _cart.AddItem(product, quantity);
        }

        return RedirectToAction("Index", "Home");
    }

    public ActionResult RemoveFromCart(int productId)
    {
        var product = _dbContext.Products.FirstOrDefault(p => p.Id == productId);

        if (product != null)
        {
            _cart.RemoveItem(product);
        }

        return RedirectToAction("Index", "Home");
    }

    public PartialViewResult CartSummary()
    {
        return PartialView("_CartSummary", _cart);
    }
}

在上面的代码中,我们创建了一个名为“CartController”的控制器,并在构造函数中实例化了一个名为“_cart”的Cart对象我们还创建了一个名为“AddToCart”的操作方法,该方法将产品添加到购物车中我们还创建了一个名为“RemoveFromCart”的操作方法,该方法从购物车中删除产品。最后,我们创建了一个名为“CartSummary”的操作方法,该方法返回一个部分视图,用于显示购物车概要。

  1. 在视图中展示购物车。

在“Views\Shared”文件夹中,创建一个名为“_CartSummary.cshtml”的新部分视图,并添加以下代码:

@model Cart

<div class="cart-summary">
    <span class="cart-count">@Model.Items.Sum(i => i.Quantity)</span>
    <span class="cart-total">@Model.ComputeTotalValue().ToString("c")</span>
</div>

在上面的代码中,我们使用Razor语法创建了一个HTML元素,用于显示购物车中产品数量和总价。

在“Views\Home”文件夹中,打开“Index.cshtml”视图,并添加以下代码:

@model IEnumerable<Product>

@foreach (var product in Model)
{
    <div class="product">
        <h2>@product.Name</h2>
        <p>@product.Description</p>
        <p>@product.Price.ToString("c")</p>
        <form method="post" action="@Url.Action("AddToCart", "Cart")">
            <input type="hidden" name="productId" value="@product.Id" />
            <input type="number" name="quantity" value="1" />
            <button type="submit">Add to cart</button>
        </form>
    </div>
}

@Html.Action("CartSummary", "Cart")

在上面的代码中,我们使用Razor语法创建了一个HTML元素,用于显示产品列表。我们还创建了一个为“Add to cart”的表单,该表单将产品ID和数量提交到“AddToCart”操作方法。最后,我们使用@Html.Action方法调用“CartSummary”操作方法,以显示购物车概要。

示例

以下是一个完整的示例,演示如何在ASP.NET MVC中实现横向展示购物车:

// Models/Cart.cs
public class Cart
{
    private List<CartItem> _items = new List<CartItem>();

    public void AddItem(Product product, int quantity)
    {
        var item = _items.FirstOrDefault(i => i.Product.Id == product.Id);

        if (item == null)
        {
            _items.Add(new CartItem { Product = product, Quantity = quantity });
        }
        else
        {
            item.Quantity += quantity;
        }
    }

    public void RemoveItem(Product product)
    {
        _items.RemoveAll(i => i.Product.Id == product.Id);
    }

    public decimal ComputeTotalValue()
    {
        return _items.Sum(i => i.Product.Price * i.Quantity);
    }

    public void Clear()
    {
        _items.Clear();
    }

    public IEnumerable<CartItem> Items => _items;
}

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

// Models/Product.cs
public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public decimal Price { get; set; }
}

// Controllers/CartController.cs
public class CartController : Controller
{
    private readonly AppDbContext _dbContext;
    private readonly Cart _cart;

    public CartController()
    {
        _dbContext = new AppDbContext();
        _cart = new Cart();
    }

    public ActionResult AddToCart(int productId, int quantity)
    {
        var product = _dbContext.Products.FirstOrDefault(p => p.Id == productId);

        if (product != null)
        {
            _cart.AddItem(product, quantity);
        }

        return RedirectToAction("Index", "Home");
    }

    public ActionResult RemoveFromCart(int productId)
    {
        var product = _dbContext.Products.FirstOrDefault(p => p.Id == productId);

        if (product != null)
        {
            _cart.RemoveItem(product);
        }

        return RedirectToAction("Index", "Home");
    }

    public PartialViewResult CartSummary()
    {
        return PartialView("_CartSummary", _cart);
    }
}

// Views/Shared/_CartSummary.cshtml
@model Cart

<div class="cart-summary">
    <span class="cart-count">@Model.Items.Sum(i => i.Quantity)</span>
    <span class="cart-total">@Model.ComputeTotalValue().ToString("c")</span>
</div>

// Views/Home/Index.cshtml
@model IEnumerable<Product>

@foreach (var product in Model)
{
    <div class="product">
        <h2>@product.Name</h2>
        <p>@product.Description</p>
        <p>@product.Price.ToString("c")</p>
        <form method="post" action="@Url.Action("AddToCart", "Cart")">
            <input type="hidden" name="productId" value="@product.Id" />
            <input type="number" name="quantity" value="1" />
            <button type="submit">Add to cart</button>
        </form>
    </div>
}

@Html.Action("CartSummary", "Cart")

在上面的示例中,我们创建了一个名为“Cart”的购物车类,并在控制器中添加了购物车操作方法。我们还创建了一个名为“_CartSummary”的部分视图,用于显示购物车要。最后,我们在视图中展示了购物车。