【问题标题】:How can I submit a form multiple times according to a for-loop?如何根据for循环多次提交表单?
【发布时间】:2012-04-25 21:01:09
【问题描述】:

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

【问题讨论】:

  • 您应该一次提交所有值并在您的 C# 代码中处理对它们的迭代。不要做多个POST 请求。
  • 一般来说,这看起来是一个不好的方法。您应该尝试对所有删除请求一个请求,以节省流量和延迟。这也可能导致您的网络服务器配置出现问题,即如果您安装了某种防洪安全过滤器(甚至在生产后期)

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


【解决方案1】:

因为您是在表单上进行直接 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]);
    }
}

【讨论】:

  • 我不确定我是否理解你,我对 asp.net C# 还很陌生。我的控制器中有一个带有公共 ActionResult Delete(int id) 的 HttpPost,我正在将 id 传递给控制器​​,如何一次添加多个 id。
  • 编辑您的 Delete 方法以改为接受字符串,因此:Delete(string id) 然后遍历传入的每个 id 并将其转换回每个删除操作的整数:var _ids = id.Split(','); foreach(var_id in _ids){ YourDeleteMethod(Int32.Parse(_id)); }
  • 谢谢,我现在明白了。超级简单,现在我看看。
【解决方案2】:

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

【讨论】:

  • 您对如何执行此操作有任何建议吗?我对 asp.net C# 相当陌生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
  • 2015-08-10
相关资源
最近更新 更多