如何通过ajax传递包含数据和文件的对象数组,并在mvc控制器中检索?

3

我有一个对象数组,如下所示。

var array=[
{
    Name:"name",
    Address:"address",
    Files://array of files
},
{
    Name:"name",
    Address:"address",
    Files://array of files
}
];

我需要通过ajax传递数组并在mvc控制器中检索它。我无法同时获取数据和文件作为控制器中的数组。
在单个对象的情况下,我使用了formData。但对于数组,我不知道应该如何做。请帮忙。
我的代码... 模型..
public class DataModel{
   public string Name{get;set;},
   public string Address{get;set;},
   public HttpPostedFileBase[] Files{get;set;}
}

Controller..

    [HttpPost]
    public JsonResult AddData(List<DataModel> data)
    {

       //code          
    }

ajax//

$.ajax({
                    type: "POST",
                    url: '/Mydata/AddData',
                    data: {data:array},
                    contentType: false,
                    processData: false,
                    dataType: "json",
                    success: function (json) {
                      //some function
                    }
});

1
使用表单数据 https://dev59.com/0l4b5IYBdhLWcg3wVwFi - Mir Gulam Sarwar
你需要使用FormData,但同时你还需要生成正确的名称 - [0].Name[0].Address[0].Files[1].Name[1].Address[1].Files等等。 - user3559349
将您的文件数据作为Blob发送。将表单输入转换为JSON字符串不起作用,因为您的表单包含多个文件,所以请尝试将每个文件转换为Blob。 - Naga Srinu Kapusetti
@Stephen Muecke 如何将此数组制作成 FormData? - Binu
@StephenMuecke 谢谢您。您节省了我的时间。它正常工作了。 - Binu
显示剩余2条评论
1个回答

0

您可以通过将数组转换为字符串,并通过ajax的数据属性传递它来传递数组。

var _myArray=JSON.stringify(array),
        $.ajax({
                //Rest of the code
                data: _myArray,
            });

JSON.stringify会将数组中的文件更改为{}。因此它无法工作。 - Binu
1
谁一直在给完全错误的答案点赞? - user3559349
@Stephen Muecke,您能否证明这是一个错误的答案? - brk
是的。如果您将数据字符串化,您还必须使用 contentType: 'json',否则 DefaultModelBinder 将无法绑定它,但您不能使用 contentType: 'json' 发送文件。建议您自己尝试一下。 - user3559349

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接