我有一个显示项目列表的网格。每行都有一个复选框,其中包含每个项目的关联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调用。认为我正在使它变得比所需的复杂。
答案 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) });
无需在两个视图上都更改代码。