2015-11-26 3 views
0

Я использую Mvc Music Store в корзине в своем приложении Mvc для электронной коммерции. Функция «Добавить в корзину» прекрасна, прежде чем добавить атрибут «Размер» в таблицу «Корзина».Расширение Mvc Music Store Корзина

Я 3 продуктов в моей таблице продукции:

  1. "Имя: Polo T-рубашка, Количество: 40, Цена: 15, Размер: S, M, L"
  2. «Имя: Футболка, Количество: 20, Цена: 10, Размер: M, L»
  3. "Имя: рубашка, Количество: 10, Цена: 25, Размер: XS, M, L"

Я ve отобразили эти размеры в раскрывающемся списке, чтобы пользователь мог выбрать размер, а затем добавить в корзину.

Проблема: Когда я выбираю размер из раскрывающегося списка и нажимаю кнопку «Добавить в корзину», он не сохраняет размер в таблице «Корзина» в базе данных.

Посмотреть

@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 Music Store Примера, так лишь часть контроллера здесь.

Я добавил эту строку string size = "Small"; и он отлично работает, он хранит «Малый» в атрибуте «Размер» таблицы «Корзина». Но я хочу, чтобы это значение выбиралось из 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

Вы должны передать вам выпадающий значение списка в метод действий, а затем вы можете сохранить их.

@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"); 
    } 
+0

Благодарим за ответ, где я должен определить эту функцию SetSize? и как ? Я имею в виду, что это не ActionResult? –

+0

это функция JavaScript, вы можете добавить ее в тег – Ravi

+0

это решение не работает. –

Смежные вопросы