如何根据for-loop多次提交表单?

时间:2012-04-13 13:31:21

标签: c# jquery asp.net-mvc for-loop

我正在使用带有剃刀模板的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");
    }

2 个答案:

答案 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个表单,尝试通过一个请求实现删除多个记录的方法!

相关问题