0

使用 Ajax,我可以在 AddToCart 操作中将 ProductID 添加到我的购物车列表中。

这是代码:

public ActionResult AddToCart(int productID)
{
    List<int> cart = (List<int>)Session["cart"];
    if (cart == null){
       cart = new List<int>();
    }
    cart.Add(productID);

    Session["cart"] = cart;

    return new JsonResult() { Data = new { Status = "Success" } };
}

在我的存储库中,我有以下 LINQ 方法来按 ID 获取产品的详细信息:

public Products GetProductByID(int id)
{
    return db.Products.SingleOrDefault(s => s.Id == id);
}

产品具有名称、描述和价格作为属性。

我有一个用于模型绑定的 ViewModel:

public class ProductsViewModel
{
    public string Description { get; set; }
    public string Name { get; set; }
    public double price { get; set; }
    public string Image { get; set; }
    public int ProductId { get; set; }
}

我有另一个持有这个 ProductsViewModel 的 Viewmodel,它是我用 foreach 循环的 ProductList:

public class HomeIndexViewModel
    {
        public List<ProductsViewModel> Productlist { get; set; }
    }

现在我需要创建一个动作,即 ShoppingCart,它应该返回 Session["cart"] 中所有项目的部分视图。所以我可以在我的视图中显示它们以及产品详细信息

该操作不需要任何参数。它只会查看会话并返回带有所选产品列表的模型。

我 100% 确定的是,在 ShoppingCart 视图中,我将 100% 使用以下代码行:

@model AvanShop.ViewModels.HomeIndexViewModel

然后做一个看起来像这样的foreach循环:

 @foreach (var item in Model.Productlist)
            {
             code to display the products that are inside the cart  
            }

这是一个关于我如何在我的索引视图中显示所有产品的操作索引的示例。

public ActionResult Index()
        {
            var Productlist = repository.GetAllProducts();
            var model = new HomeIndexViewModel()
            {
                Productlist = new List<ProductsViewModel>()
            };

            foreach (var Product in Productlist)
            {
                FillProductToModel(model, Product);
            }
            return View(model);
        }

private void FillProductToModel(HomeIndexViewModel model, ProductImages productimage)
{
    var productViewModel = new ProductsViewModel
    {

        Description = productimage.Products.Description,
        ProductId = productimage.Products.Id,
        price = productimage.Products.Price,
        Name = productimage.Products.Name,
        Image = productimage.ImageUrl,
    };
    model.Productlist.Add(productViewModel);
}

我不知道如何做到这一点,任何提示或帮助表示赞赏

4

1 回答 1

1

注意:我建议调用该操作ShoppingCart,而不是GetShoppingCart; 这更好地适应了 MVC 的约定,但这是一个小问题,不是必需的。

public ActionResult GetShoppingCart()
{
    var cart = Session["cart"] as List<int>;

    var products = cart != null ? cart.Select(id => 
             {
                 var product = GetProductById(id);
                 return new ProductsViewModel
                    {
                       Name = product.Name,
                       Description = product.Description,
                       price = product.Price
                    }
             }) : new List<ProductsViewModel>();

    return PartialView(products);
}

而你的观点(我假设你正在使用 Razor 视图)Views/{your controller name}/GetShoppingCart.cshtml,:

@model IEnumerable<ProductsViewModel>

@if(Model.Any())
{
   The following items are in your cart:
   <ul>
   @foreach(var product in Model)
   {
      <li>@product.Name - @product.Price.ToString("{0:C}")</li>
   }
   </ul>
}
else
{
   You have no items in your shopping cart.
}
于 2012-10-31T00:04:42.053 回答