扩展Mvc音乐商店购物车

时间:2015-11-26 06:28:15

标签: asp.net asp.net-mvc asp.net-mvc-4

我在电子商务Mvc应用程序中使用了Mvc Music Store购物车。 "加入购物车"在我的" Cart"中添加Size属性之前,函数没问题。表

我的产品表中有3种产品:

  1. "名称:Polo T恤,数量:40,价格:15,尺寸:S,M,L"
  2. "名称:T恤,数量:20,价格:10,尺寸:M,L"
  3. "名称:衬衫,数量:10,价格:25,尺寸:XS,M,L"
  4. 我在下拉列表中显示了这些尺寸,因此用户可以选择尺寸,然后添加到购物车。

    问题:当我从下拉列表中选择尺寸并点击"添加到购物车"按钮,它不会在" Cart"中存储大小。数据库中的表。

    查看

    @model FypStore.Models.Product
    
    @Html.DropDownListFor(m => m.Size, new SelectList(Model.Size.Split(new char[] { ',' })))
    <span>PKR @Html.DisplayFor(model => model.Price)</span>
    <br />
    <br />
    <button type="button" class="btn btn-fefault cart">
    <i class="fa fa-shopping-cart"></i>
    @Html.ActionLink("Add to cart", "AddToCart", "ShoppingCart", new { id = Model.ProductId }, "")
    </button>
    

    控制器我已经使用了MVc音乐商店示例中的完整购物车控制器,所以这里只有部分控制器。

    我已添加此行字符串大小=&#34;小&#34 ;; ,它工作正常,它存储&#34;小&#34;在Cart表的Size属性中。但是我希望从Dropdownlist中选择这个值。

    public ActionResult AddToCart(int id)
        {
            // Retrieve the album from the database
            var addedAlbum = storeDB.Products.Single(prod => prod.ProductId == id);
            string size = "Small";
            // Add it to the shopping cart
            var cart = ShoppingCart.GetCart(this.HttpContext);
            cart.AddToCart(addedAlbum, size);
    
            // Go back to the main store page for more shopping
            return RedirectToAction("Index");
        }
    

    ShoppingCart.cs

    public void AddToCart(Product product, string size)
        {
            // Get the matching cart and album instances
            var cartItem = storeDB.Carts.SingleOrDefault(
                c => c.CartId == ShoppingCartId
                && c.ProductId == product.ProductId);
    
    
    
            if (cartItem == null)
            {
                // Create a new cart item if no cart item exists
                cartItem = new Cart
                {
                    ProductId = product.ProductId,
                    CartId = ShoppingCartId,
                    Count = 1,
                    Size = size
                };
    
                storeDB.Carts.Add(cartItem);
            }
            else
            {
                // If the item does exist in the cart, then add one to the quantity
                cartItem.Count++;
            }
    
            // Save changes
            storeDB.SaveChanges();
        }
    

1 个答案:

答案 0 :(得分:1)

您需要将下拉列表值传递给Action方法,然后您可以保存它们。

@Html.ActionLink("Add to cart", "AddToCart", "ShoppingCart", new { id = Model.ProductId }, new {id = Model.ProductId })



@Html.DropDownListFor(m => m.Size, new SelectList(Model.Size.Split(new char[] { ',' },new { @onchange="SetSize(this.value,'@Model.ProductId')" })))
<script>
function SetSize(size,id)
{
    $(""+id).attr("href", "/ShoppingCart/AddToCart"+"?id="+id+"&size="+size);
}
</script>

public ActionResult AddToCart(int id,string size)
    {
        // Retrieve the album from the database
        var addedAlbum = storeDB.Products.Single(prod => prod.ProductId == id);
        string size = size;
        // Add it to the shopping cart
        var cart = ShoppingCart.GetCart(this.HttpContext);
        cart.AddToCart(addedAlbum, size);

        // Go back to the main store page for more shopping
        return RedirectToAction("Index");
    }