1
我呈現出像這樣的局部視圖:ASP.NET MVC Ajax.BeginForm返回意外的結果
<div id="cart">
<%Html.RenderPartial("Cart", Model); %>
</div>
對於在車中的每個行我使用的是形式刪除的項目(這是這一重要當JavaScript被禁用,因此沒有Ajax.ActionLink作品):
<%using (Ajax.BeginForm("RemoveFromCart", "Cart", new AjaxOptions { UpdateTargetId="cart"}))
{%>
<%=Html.Hidden("ProductId", line.Product.Id)%>
<%=Html.Hidden("returnUrl", ViewData["returnUrl"])%>
<input type="image" src="<%=AppHelper.ImageUrl("delete.gif")%>" value="Remove item" />
<%} %>
我的控制器操作:
[HttpPost]
public ActionResult RemoveFromCart(Cart cart, int productId, string returnUrl)
{
Product p = _catalogService.GetProduct(productId);
cart.RemoveLine(p); // TODO - what about if null?
if (Request.IsAjaxRequest())
return PartialView("Cart", cart);
else
return RedirectToAction("Index", new { returnUrl });
}
根據我的理解,啓用javascript後,單擊刪除按鈕將對操作進行異步發佈,並用更新後的局部視圖替換「購物車」容器的內容。如果js被禁用,則會進行完整回發,並且用戶會再次被重定向到索引頁面。
如果我添加一些項目到購物車並刪除一個項目它工作正常。但是,如果我然後嘗試刪除另一個項目,則什麼都不會發生原因是在成功刪除後查看頁面源,包含要刪除的產品ID的隱藏字段顯示已刪除項目的ID。
成功刪除之前:
<input id="ProductId" name="ProductId" type="hidden" value="6" />
<input id="ProductId" name="ProductId" type="hidden" value="22" />
<input id="ProductId" name="ProductId" type="hidden" value="47" />
去除第三產品後(47),其餘項目顯示的值47.我的模型無疑更新的隱藏字段,我可以看到踩着當該項目被刪除通過控制器操作,但它好像我的部分視圖沒有正確綁定。
任何幫助,將不勝感激。
感謝 本
絕對是現貨 - 謝謝。 我還發現用以下代碼替換Html.Hidden幫助方法: 」/> 修復了這個問題。有任何想法嗎? – 2010-02-14 14:31:22
不確定。不過,您知道,HTML元素上的id必須是唯一的,對。來自助手和手寫輸入的HTML都是無效的。我可能會改變它以使用returnUrl的路由值。我不得不在JavaScript調試器中查看它以真正瞭解發生了什麼。 – tvanfosson 2010-02-14 14:38:27
+1' 2011-01-07 08:08:13