使用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; }
}
我有另一个Viewmodel来保存这个ProductsViewModel,它是我用foreach循环的ProductList:
public class HomeIndexViewModel
{
public List<ProductsViewModel> Productlist { get; set; }
}
现在我需要创建一个动作,即ShoppingCart,它应该返回Session [“cart”]中所有项目的局部视图。所以我可以在我的视图中使用产品详细信息显示它们
动作不需要任何参数。它只会查看会话并返回一个包含所选产品列表的模型。
我100%肯定的是,在ShoppingCart View中,我将100%使用以下代码行:
@model AvanShop.ViewModels.HomeIndexViewModel
然后执行一个看起来像这样的foreach循环:
@foreach (var item in Model.Productlist)
{
code to display the products that are inside the cart
}
这是关于我如何使用Action索引显示我的索引视图中的所有产品的示例。
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);
}
我不知道如何做到这一点,感谢任何提示或帮助
答案 0 :(得分: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.
}