C#MVC - 在单个AJAX调用中发送文件和数据(不是来自表单)

时间:2017-04-27 06:26:47

标签: javascript json ajax asp.net-mvc file-upload

我无法将JSON数据和文件发送到我的控制器。我之前设法让它只与FormData一起工作(从表单中获取数据,其中不仅包含文件输入 - 而且所有数据都来自表单)。现在,在另一个流程中,我需要发送不是来自表单的相同文件和数据。

这是我的行动:

public ActionResult Process(List<TheRequestClass> requests, HttpPostedFileBase file)

这是我最近的尝试:

var data = // knockout.js-mapped data

var unmapped = ko.mapping.toJS(data);

var formData = new FormData();
formData.append('requests', JSON.stringify({ requests: unmapped }));
formData.append('file', $('input[type=file]')[0].files[0]);
$.ajax({
    contentType: 'application/json',
    dataType: 'json',
    url: '@Url.Action("Process", "TheController")',
    type: 'POST',
    data: formData,
    processData: false,
    contentType: false,
    success: function (result) { },
    error: function (xhr) { }
    });

不幸的是,在控制器请求最终作为空集合,而文件确实上传正确。

我收到的原始数据是:

------WebKitFormBoundaryArn3v8KN5flwiB3k
Content-Disposition: form-data; name="requests"

{"requests":[ /* the array of requests */ ]}
------WebKitFormBoundaryArn3v8KN5flwiB3k
Content-Disposition: form-data; name="file"; filename="new_small test.xls"
Content-Type: application/octet-stream

��ࡱ�

为了进行比较,有效的流程(再次 - 仅使用表格中的数据)如下:

动作:

public ActionResult Upload(OtherRequest request, HttpPostedFileBase file)

AJAX电话:

var formData = new FormData($('form#formId').get(0));

$.ajax({
    url: '@Url.Action("Upload", "TheController")',
    type: 'POST',
    data: formData,
    processData: false,
    contentType: false,
    success: function (data) { },
    error: function (xhr) { }
});

我做错了什么?

0 个答案:

没有答案