0

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

2 回答 2

2

因为您正在表单上进行直接 POST,所以它只会在第一次循环中执行,因为表单在进入下一个循环时已经在发布。

这不是处理多次删除的正确方法,但如果您必须这样做,则需要创建一个 AJAX 发布方法,以便可以异步进行多次删除。

更好的方法是将要删除的完整 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]);
    }
}
于 2012-04-13T13:43:22.237 回答
0

每页只能提交一个表单,尝试实现一个请求删除多条记录的方法!

于 2012-04-13T13:37:02.373 回答