我有一个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的唯一原因是正确获取所有复选框值。这不可能是场景的独特之处,我在这里疯了吗?
答案 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));
});
});