Jquery脚本删除表单集合中的所有项目
我有一张桌子:
ProductId Productname Quantity UnitPrice <% for(int i=0; i m.NorthOrderDetails[i].Quantity) %> m.NorthOrderDetails[i].UnitPrice) %> <button type="button" class="delete" data-id="">Delete <input type="hidden" name="" value="" />
当我单击删除按钮时,我正在调用此脚本:
var url = ''; $('.delete').click(function () { var id = $(this).data('id'); // Get the product ID var row = $(this).closest('tr');// Get the table row $.post(url, { ID: id }, function () { row.remove(); // remove the row from the table }); });
并且脚本在Controller中调用此方法
[HttpPost] public JsonResult Delete(int ID) { NorthOrder forOrderDetail = (NorthOrder)Session["Order"]; forOrderDetail.NorthOrderDetails.RemoveAll(z => z.ProductID == ID); Session["Order"] = forOrderDetail; return Json(null); }
在UI中,当我单击提交按钮时,行会正确删除。 但是在控制器方法中,当我删除第一行时,集合的计数等于null,当我删除最后一行时,它等于1例如,当页面加载时,表包含两行
public ActionResult View2(NorthOrder q, string button) { }
为什么?
因为要删除某些行,但是在“ Save
提交”操作中回发整个集合,所以索引器要么不是从零开始,要么不是连续的。 在删除第1行的情况下,发布值为
NorthOrderDetails[1].Quantity=SomeValue&NorthOrderDetails[1].UnitPrice=SomeOtherValue
NorthOrderDetails[0]...
没有值NorthOrderDetails[0]...
因此绑定失败并且集合为空。
默认情况下, DefaultModelBinder
要求集合索引器从零开始并且是非连续的。 删除项目并从DOM中删除其控件时,无法正确绑定集合。 要完成这项工作,您需要添加一个额外的隐藏输入, DefaultModelBinder
用它来匹配集合属性。 将视图代码更改为
% for(int i=0; i < Model.NorthOrderDetails.Count; i++) {%> <%: Html.DisplayFor(m => m.NorthOrderDetails[i].ProductID) %> // Remove the .ToString() <%: Html.DisplayFor(m => m.NorthOrderDetails[i].ProductName) %> // add this <%: Html.TextBoxFor(m => m.NorthOrderDetails[i].Quantity) %> <%: Html.TextBoxFor(m => m.NorthOrderDetails[i].UnitPrice) %> <% } %>
注意:我早就忘记了aspx,但隐藏输入的剃刀代码是所以你可能想检查我的语法。
附注:
- 你在这里使用会话似乎不合适。 在
Delete
方法中,您将删除该项目。 当您最终保存集合时,您需要从数据库中获取原始集合并进行比较以确定要在数据库中删除哪些项目。 相反,你Delete()
方法应该调用数据库来删除项目(请参阅我之前的问题的答案) - 您的
Add
按钮不应该是提交并发布到View2()
方法。
- AJAX和FormsAuthentication,如何阻止FormsAuthentication覆盖HTTP 401?
- jqGrid multiselect使用大型本地数据和jQueryUI 1.8非常慢,jQueryUI 1.7很好
- ASP.NET,jQuery,脏表单和window.onbeforeunload
- 使用jQuery对listview进行排序?
- 如何根据asp.net web应用程序中使用javascript的下拉列表中的选定选项显示不同的输入类型
- 如何使用jquery跟踪文本框中的更改
- JS从文本框中抓取文本,传递给asp.net mvc ActionResult,但ActionResult参数显示为null
- 如何使用Javascript或JQuery获取页面内容
- 选择:jQuery插件…在asp.net中回发后无效