MVC / Jquery将AJAX响应发送到视图中

时间:2018-09-28 14:01:44

标签: jquery ajax asp.net-mvc

我有一个显示项目列表的网格。每行都有一个复选框,其中包含每个项目的关联ID。我试图将每个选中复选框的值的数组传递到我的控制器中,获取那些项目数据的列表,然后在响应时将该数据传递到显示所有项目数据列表的视图中。它一直返回到响应,但是我不知道如何获取绑定到显示视图的模型来接受响应。

这就是我所拥有的:

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 :(得分:0)

尝试执行此操作,然后再将结果传递给AJAX返回,请先使用Newtonsoft JSON序列化器对其进行序列化:

SELECT INV_MAST_UID
     ,[1] AS COMPONENT_INV_MAST_UID_1
     ,[2] AS COMPONENT_INV_MAST_UID_2
     ,[3] AS COMPONENT_INV_MAST_UID_3
FROM Assembly
PIVOT 
(
    MAX(COMPONENT_INV_MAST_UID)
    FOR sequence_number IN([1],[2],[3]) 
) as pvt 

序列化后,将其用作字符串作为参数在ActionResult上获取,然后从那里反序列化:

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

无需在两个视图上都更改代码。