我的一个控制器的要求发生了变化,除了以前的输入类型之外,它还需要能够接受一个文件: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对象中以更干净的方式处理,但我无法弄清楚我是如何做到的。是否有可能再清理它?