Post 循环内的表单数据

Post Form Data from Within a Loop

我想在单击列表中的复选框时提交表单数据。目前我正在使用不起作用的 onclick 事件,因为它发送一个获取请求,我需要它发送一个 post 请求。

如何从循环中 post 我的控制器方法的两个参数。

编辑 从下面的评论中我需要使用 AJAX 因为我打算留在同一页面上。我错误地认为 post 请求可以做到这一点。如果有人愿意用 AJAX 为我指明正确的方向,将不胜感激。

代码如下:

@for (var i = 0; i < Model.Count(); i++)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => modelItem[i].InvoiceID)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => modelItem[i].Description)                     
                </td>
                <td>
                    @Html.DisplayFor(modelItem => modelItem[i].InvoiceDate)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => modelItem[i].DueDate)
                </td>
                <td>                        
                    <input asp-for="@Model[i].Paid" onclick="location.href='@Url.Action("UpdatePaidStatus", "Billing", new { invoiceID = Model[i].InvoiceID, paid = Model[i].Paid })'" />                       
                </td>                   
            </tr>
        }

您可以使用 jQuery 创建自己的处理程序以从表单中收集所有数据,然后手动对您的控制器执行 post 或使用 Ajax.BeginForm。 一些相关的答案已经 posted here and here.

根据您的评论,您想要 post 行中模型的 invoiceID 以及指示复选框状态的值。把你html改成

<input type="checkbox" class="status" value="@Model[i].InvoiceID />

并添加以下脚本

var url = "@Url.Action("UpdatePaidStatus", "Billing");
$('.status').click(function() {
  var id = $(this).val();
  var isPaid = $(this).is(':checked');
  $.post(url, { id: id, isPaid : isPaid }, function(data) {
    if (data) {
      // do something based on the data you return
    } else {
      // oops
    }
  }).fail(function() {
     // oops
  });
});

这会post到下面的方法

[HttpPost]
public JsonResult UpdatePaidStatus(int ID, bool isPaid)
{
  // save something
  return Json(true); // or return Json(null) is it fails?
}

您没有指明当 ajax 调用成功或失败时您可能会发生什么,但是例如您可以更新 DOM 以显示指示成功或失败的消息。

旁注:ajax 在这里可能真的没有必要。如果您在每一行中包含 Model[i].InvoiceID 的隐藏输入并执行正常表单提交至

public ActionResult UpdatePaidStatus(IList<yourmodel> model)

那么您的模型将与 InvoiceIDPaid 属性正确绑定,因此您可以一次更新集合中的所有项目。