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" } };
}
私のリポジトリには、IDで製品の詳細を取得するための次のLINQメソッドがあります。
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; }
}
次に、Session["cart"]内のすべてのアイテムの部分的なビューを返すShoppingCartというアクションを作成する必要があります。だから私はそれらを製品の詳細とともに私のビューに表示することができます
アクションにはパラメータは必要ありません。セッションを調べて、選択した製品のリストを含むモデルを返します。
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);
}
これをどのように行うのかわかりません。ヒントやヘルプをいただければ幸いです。