MVC / Jquery отправляет AJAX-ответ в представление - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть сетка, которая отображает список проектов.У каждой строки есть флажок с идентификатором каждого проекта.Я пытаюсь передать массив значений каждого выбранного флажка в мой контроллер, получить список данных этих проектов, а затем в ответ передать эти данные в представление, которое отображает список всех этих данных проекта.Он возвращается к ответу, но я не могу понять, как заставить модель, привязанную к представлению дисплея, принять ответ.

Вот что у меня есть:

Вызов jQuery:

$("#PrintProjectFormId").submit(function (event) {

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

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

    var action = $("#PrintProjectFormId").attr("action");

    $.ajax({
        type: "POST",
        url: action,
        data: {
            projectId: projects
        },
        success: function (result) {
            $("#printProjectModal").modal('hide');

            //wait for modal to close before redirect
            $("#printProjectModal").on("hidden.bs.modal", function () {

                window.location = result.Url + "/" + result.responseData;

            });
        },
        error: function (jqXHR, textStatus, errorThrown) {
            alert("There was a problem submitting this project to print.");
        }
        });
    });

Действие контроллера:

  [HttpPost]
  public JsonResult GetPrintableProject(Guid[] projectId)
  {
   var message = "";
   var vmOneSheet = _projectService.MassExport(projectId);

 message = "Projectsreturned";
 UrlHelper(Request.RequestContext).Action("ProjectExport", "Project");
        return Json(new { Url = redirectUrl, response = message, responseData = vmOneSheet });
    }

, которое вызывает:

    public ActionResult ProjectPDFExport(IEnumerable<ProjectExportVM> vmOneSheet)
    {
        return View("ProjectPDFExport", vmOneSheet);
    }

и представление дисплея:

@using Web.ViewModels
@model IEnumerable<ProjectExportVM>

@foreach (var item in Model)
{
//displays each project

Данные ответа представляют собой бесчисленный список моделей представления, по одному для каждого проекта, выбранного в исходной сетке.

У меня все работает нормальнопока это просто ActionResult, но мы пытаемся сделать это вызовом AJAX.Думаю, я делаю это сложнее, чем нужно.

1 Ответ

0 голосов
/ 28 сентября 2018

Попытайтесь сделать это, прежде чем передать результат в свой возврат AJAX, сначала сериализовать его, используя сериализатор JSON Newtonsoft:

return Json(new { Url = redirectUrl, response = message, 
                  responseData = JsonConvert.SerializeObject(vmOneSheet) });

После сериализации, получить его в ActionResult, используя в качестве параметра строку в качестве строки.затем оттуда его десериализовать:

public ActionResult ProjectPDFExport(string vmOneSheet)
{
   var result = JsonConvert.DeserializeObject<IEnumerable<ProjectExportVM>>(vmOneSheet);  
   //You will get the result as IEnumerable of ProjectExportVM  
}

Нет необходимости изменять код в обоих представлениях.

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