1

我有一个包含对象列表的视图模型。

将列表绑定到 WebGrid 很好,并且可以正确显示所有数据。

这些对象有一个布尔值,我希望用户通过选择与 WebGrid 中的每条记录一起显示的复选框来更改。当用户选中/取消选中各种复选框然后单击更新按钮时,我希望能够保存对对象的更改。

更新证明了 MVC 和 Razor 的正确“A 痛​​”。

如何将这些更改发送回控制器?有人可以建议吗?有样品吗?

更新:

在给每个复选框一个名称和 ID 后,我已经能够将整个表单传递回控制器。该值设置为 item.Id 并且仅在实际选中复选框时才在表单的属性中找到。

所以在控制器中,我这样做:

public ActionResult Assign(FormCollection form)
{
    var ch = form.GetValues("itemChk");
    foreach (var id in ch)
    {
      //...Get object using id
      //...Call your method
    }
    return View();
}

ch 是 item.Ids 的字符串数组,只有那些被选中的复选框。通过将 item.Id 作为选中复选框的值返回,我可以在项目本身上分配/设置该值并保存/更新它。

接下来尝试获取所有返回值的复选框。还可以在 WebGrid 中的每一行的文本框中尝试类似的方法来处理返回值。

这是让我沿着这条路走下去的链接。

4

1 回答 1

1

您可以使用 Json ajax 调用将 FormCollection 传递给控制器

$('#btnClick').click(function (event) {
    var form = $("#fmSearch").serializeArray();
    $.ajax({
        url: '/Home/Assign',
        dataType: "json",
        type: "post",
        data: form,
        cache: false,
        success: function (data) {
        },
        error: OnError
    });
});

请注意:不要添加“contentType:”application/json;charset=utf-8" 因为没有任何 json 内容。

fmSearch 是 Html.BeginForm() 的 id,可以这样写:

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "fmSearch" }))
{
    @Html.ValidationSummary(true)
}

最后,[HttpPost]在您的操作上方添加并将 ActionResult 替换为 JsonResult。

于 2015-04-06T02:04:33.650 回答