【问题标题】:Post multiple files to an MVC5 Controller using jQuery使用 jQuery 将多个文件发布到 MVC5 控制器
【发布时间】:2014-09-21 03:23:09
【问题描述】:

我正在尝试将我在页面上收集的一些文件发布到我的 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 数组始终为空。

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

谢谢,祝你有美好的一天。

【问题讨论】:

  • 可以从this.Request.Files访问这个文件,不需要action参数中的属性。
  • 如果我想这样做,是否需要使用 .ajax() 的特定方式?

标签: jquery asp.net ajax asp.net-mvc asp.net-mvc-5


【解决方案1】:

看起来解决这个问题的最好方法是不要期望数组进入请求对象。

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

        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
                });

【讨论】:

  • 如果你包含一个html会更有帮助
猜你喜欢
  • 2013-07-03
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 2015-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多