Post多个文件到一个MVC5控制器使用jQuery



我试图张贴一些文件,我收集在一个页面到我的ASP。Net MVC5控制器。我将向您展示我期待的请求对象,以及我用来发布请求的前端代码。

当涉及到控制器时,CoverSheet确实通过,但是无论我做什么,SupportingDocuments数组总是空的。我尝试使用FormData,我尝试使用一个正常的JS对象,两者都有相同的结果。

public class SomeRequest
{
    public int SomeRequestId { get; set; }
    public HttpPostedFileBase CoverSheet { get; set; }
    public HttpPostedFileBase[] SupportingDocuments { get; set; }
}

这里是前端

var formData = new FormData();
var supportingDocsArray = [];
_.each(supportingDocumentsInput[0].files, function(f) { supportingDocsArray.push(f); });
formData.append('SomeRequestId', self.selectedThing().SomeRequestId);
formData.append('CoverSheet', coverSheetInput[0].files[0]);
formData.append('SupportingDocuments', supportingDocsArray);
var request = $.ajax({
    url: '/SomeController/Upload',
    data: formData,
    type: 'POST',
    dataType: 'json',
    processData: false,
});

所以正如你所看到的,我期待CoverSheet中的单个文件和SupportingDocuments中可能的文件数组。

当涉及到控制器时,CoverSheet确实通过了,但是无论我做什么,SupportingDocuments数组总是空的。

有什么技巧可以让它工作吗?

谢谢大家,祝大家今天愉快。

看起来修复这个问题的最好方法是不期望数组出现在请求对象上。

这是更新后的控制器代码:

        public async Task<JsonNetResult> Upload(ThingUploadRequest req)
    {
        foreach (string filename in Request.Files)
        {
            var file = Request.Files[filename];
            if (file != req.CoverSheet)
            {
                req.SupportingDocuments.Add(file);
            }
        }
        var result = await _uploadHandler.Upload(req);
        return new JsonNetResult
        {
            Data = result
        };
    }

,这里是更新后的前端代码:

                var formData = new FormData();
                _.each(supportingDocumentsInput[0].files, function(f) {
                    formData.append(f.name, f);
                });
                formData.append('SomeThingId', self.selectedThing().ThingId);
                formData.append('CoverSheet', coverSheetInput[0].files[0]);
                var request = $.ajax({
                    url: '/SomeController/Upload',
                    data: formData,
                    type: 'POST',
                    dataType: 'json',
                    processData: false,
                    contentType: false
                });

最新更新