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" } };
}

私のリポジトリには、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);
}

これをどのように行うのかわかりません。ヒントやヘルプをいただければ幸いです。

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 に答える