Передача массива значений флажков в MVC - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть представление 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 голосов
/ 28 сентября 2018

Вы можете удалить этот скрытый ввод и попробовать что-то вроде этого:

$(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));
     });

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...