在MVC中传递复选框值数组

时间:2018-09-28 17:25:34

标签: jquery asp.net-mvc

我有一个Razor视图,其中包含一个jQuery Datatables网格,每行都有一个复选框。每个复选框对应一个项目,用户选择他们希望在可打印页面中看到的项目。我不得不编写一些自定义代码来获取所有页面上的所有复选框,然后将这些选择的值传递给模式中的隐藏字段。当用户选择“打印”时,将出现模式,然后从那里将表单提交给控制器。然后,控制器将值作为数组传递给服务,该服务将数据返回到视图。

这是模态上的表格:

@using (Html.BeginForm("GetPDFExport", "Project", FormMethod.Post, new { enctype = "multipart/form-data" , id = "PrintableProjectForm" }))
{
 <input type="hidden" name="projectId" id="projectId" value="">
 <Input type="submit" id="submitPrintableProject" value="Submit" />
}

以及调用的代码,以将选定的复选框放入模式中的隐藏字段:

$(document).on("click", "#printProject", function () {
 //code to get checkboxes on all pages
 var projectsGrid = $('#projectsGrid').dataTable();

 var selectedProjects = [];

 selectedProjects = projectsGrid.$('input[type="checkbox"]').serializeArray();

 var projects = [];

 $(selectedProjects).each(function (i, field) {
    projects.push(field.value);
 });

  $('#projectId').val(projects.toString());
});

和控制器签名:

public ActionResult GetProjects(Guid[] projectId)
{
//service call that returns projects
}

我的问题是我无法从隐藏字段中获取值到控制器,控制器始终显示为空。我本来是想通过AJAX调用来做到这一点的,但确实可行,但是实际上我们正在重定向到导致其他问题的打印页面。看来应该很简单,希望有人能帮助我。

编辑:做了大量研究,所有事情都说要使用AJAX调用,但我并没有停留在同一页面上。我需要将数据发布到控制器,从服务器获取项目,然后使用相应的模型提供视图。我完全使用jQuery的唯一原因是正确获取所有复选框值。这不可能是场景的独特之处,我在这里疯了吗?

1 个答案:

答案 0 :(得分:1)

您可以删除该隐藏的输入,然后尝试执行以下操作:

$(document).on("click", "#printProject", function () {
     //code to get checkboxes on all pages
     var projectsGrid = $('#projectsGrid').dataTable();

     var form = $('#PrintableProjectForm');

     var selectedProjects = [];

     selectedProjects = projectsGrid.$('input[type="checkbox"]').serializeArray();

     $(selectedProjects).each(function (i, field) {
         form.append($('<input />').attr('name', 'projectId').attr('hidden', 'hidden').val(field));
     });

});