2015-06-24 63 views
1

我正在開發一種使用會話狀態的簡單類型的購物車。我得到了一切工作,但我嘗試添加添加同一項目的其他單位的功能。我有一個Cart類,它帶有一個CartItems列表。每個CartItem都有產品及其數量。使用GET方法的視圖獲得了一個很好更新的購物車和會話(除了量,我打算用POST請求修復)。發佈附加信息來更新ViewModel - 在購物車中添加數量

我試過下面的路徑,但數量始終停留在0.我在這裏看到一個類似的帖子,這可能會增加同樣的問題。

http://stackoverflow.com/questions/23363813/why-isnt-my-viewmodel-updating

但它需要淘汰賽JS,我並沒有接觸到,但(和需要完成我的短時間表學校項目)。如果有圍繞淘汰賽的想法,我將不勝感激。下面是一個簡化的代碼,爲了清晰。

控制器

[HttpPost] 
public ActionResult Show(CartViewModel cvm) 
{ 
Cart cart = (Cart)Session["Cart"]; 
cvm.CartItems = cart.CartItems; 

StringBuilder sb = new StringBuilder(); 

if (TryUpdateModel(cvm)) 
{ 
    foreach (CartItem c in cvm.CartItems) 
    { 
     sb.Append(c.Product.Name); // works 
     sb.Append(c.Quantity); // always 0 :(
    } 
} 

return RedirectToAction("Index", "Home"); 
} 

查看

@model Project.ViewModels.CartViewModel 

@using (Html.BeginForm()) 
{ 
foreach (var item in Model.CartItems) 
    { 
     @item.Product.Name 
     <img src="@item.Product.Image" alt="@item.Product.Name"/> 

    @Html.EditorFor(i => item.Quantity) 
    } 
} 

<input type="submit" value="Send" /> 

} 

回答

1

你使用foreach循環正在產生重複id屬性(無效HTML)和重複這有你的模型沒有關係name屬性。 Yu需要使用for迴路(屬性CartItems必須是IList<CartItem>)或CartItem類型的定製EditorTemplate

使用for循環

for(int i = 0; i < Model.CartItems.Count; i++) 
{ 
    @Html.DisplayFor(m => m.CartItems[i].Name) 
    <img src="@Model.CartItems[i].Product.Image" alt="@Model.CartItems[i].Product.Name"/> 
    @Html.EditorFor(m => m.CartItems[i].Quantity) 
} 

,這將產生對財產Quantity正確name屬性,例如

<input name="CartItems[0].Quantity" ...> 
<input name="CartItems[1].Quantity" ...> 

將結合到模型

+0

謝謝斯蒂芬,這有助於! – Turo