我正在使用带有剃刀模板的asp.net C#MVC3,并希望了解以下内容:
我有一个表单,这个表单包含一个按钮。如果我点击按钮,将执行以下代码:
function OnGetSelectedFieldValues(result) {
for (var i = 0; i < result.length; i++) {
$("#id").val(result[i]); //This will replace the value of my hidden field with the selected id
$("#DeleteForm").submit();
}
}
根据我的逻辑,这应该提交并删除我从gridview中选择的每一行。 它确实选择了每条记录,我已经使用Javascript“alert()”进行了测试。 但它只删除了第一条记录,为什么会发生这种情况,我该如何解决?
此致
马
编辑: 这是我的表格(为了便于理解):
@using (Html.BeginForm("Delete", "Home", FormMethod.Post, new { id = "DeleteForm" }))
{
<input type="hidden" id="id" name="id" />
<input type="button" id="button" value="Verwijder geselecteerde" />
}
我的控制器:
[HttpPost]
public ActionResult Delete(int id)
{
ErrorRepository repo = new ErrorRepository();
var test = repo.GetById(id);
repo.Delete(test);
return RedirectToAction("Index");
}
答案 0 :(得分:2)
因为你在表单上进行直接POST,所以它只会在第一次循环执行,因为表单在到达下一个循环时已经发布了。
这不是处理多个删除的正确方法,但如果必须这样做,则需要创建一个AJAX post方法,以便多次删除可以异步进行。
更好的方法是将完整的ID列表传递给表单POST,然后在服务器端一次删除它们。您应该构建一个逗号分隔ID的字符串,并将其发送到POST方法。然后在方法中使用
var _ids = values.split(',');
foreach(var _id in _ids){
YourDeleteMethod(Int32.Parse(_id));
}
如果你必须通过多个帖子来做,你会想要像:
function OnGetSelectedFieldValues(result) {
for (var i = 0; i < result.length; i++) {
$.post("yourPostURL", result[i]);
}
}
答案 1 :(得分:0)
您每次只能提交1个表单,尝试通过一个请求实现删除多个记录的方法!