将具有多维数组的FormData对象发送到控制器

时间:2016-02-11 15:20:36

标签: javascript jquery ajax asp.net-mvc html5

我的一个控制器的要求发生了变化,除了以前的输入类型之外,它还需要能够接受一个文件:string,string []和string [] []。

在文件上传要求之前,它只是使用'application / json'contentType进行AJAX调用。我发现我可以通过创建FormData对象在单个AJAX调用中实现文件和字符串发布,附加文本和文件,并让控制器接受HttpPostedFileBase。

发布文件和字符串工作正常,我遇到的问题是处理javascript数组。以前的版本可以很容易地使用JSON.stringify处理它,但是需要更改后才能进行更新。

我最终得到了它的工作,但我觉得我错过了一个更好的方法来处理FormData对象中的填充数组。以下是它当前的实现方式(字段重命名和内容清理以便于阅读):

C#

[HttpPost]
public ActionResult TestAR(string t1, string t2, string[][] t3,
string[] t4, HttpPostedFileBase t5)
{
}

的Javascript

var formData = new FormData();
formData.append('t1', $('#t1').val());
formData.append('t2', $('#t2').val());
$.each(t3, function (key1, value1) {
    $.each(value1, function (key2, value2) {
        formData.append('t3[' + key1 + '][' + key2 + ']', value2);
    });
});
$.each(t4, function (key1, value1) {
    formData.append('t4[' + key1 + ']', value1);
});
formData.append('t5', file);

var farr = [];
var valForm = $.ajax({
    url: '@Url.Action("TestAR", "TC", null)',
    type: 'POST',
    data: formData,
    cache: false,
    contentType: false,
    processData: false
})
.done(function (result) {
    // ...
})
.fail(function (event, xhr, status, exc) {
    // ...
});
farr.push(valForm);

我觉得数组和多维数组可以在FormData对象中以更干净的方式处理,但我无法弄清楚我是如何做到的。是否有可能再清理它?

0 个答案:

没有答案