我无法将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) { }
});
我做错了什么?