【发布时间】:2019-05-27 07:21:25
【问题描述】:
问题:无法将 File 对象解析为 JSON 字符串,这样做时只会获取空值,同时尝试将复杂类型发送到 MVC 控制器。
我尝试将它添加到 FormData 对象中并将其传递给控制器,但是,传递它们的列表并不成功,因为它要么返回一个空数组,要么只是简单的 null
型号:
public class UploadedDocument
{
public HttpPostedFile File { get; set;}
public string DocumentId { get; set;}
public string DocumentType { get; set; }
}
控制器:
[HttpPost]
[ActionName("UploadFile")]
public ActionResult Upload(IEnumerable<UploadedDocument> documents)
{
return View();
}
上传功能:
var _documents = [];
for (var i = 0; i < arrayOfFiles.length; i++) {
var document = {
"File": arrayOfFiles[i].file,
"DocumentId": arrayOfFiles[i].documentId,
"DocumentType": arrayOfFiles[i].documentName
};
_documents.push(document);
}
$.ajax({
url: "@Url.Action("UploadFile", "Home")",
type: "POST",
data: {"documents":_documents}
});
}
});
【问题讨论】:
-
在你的 ajax 调用中试试这个:data: JSON.stringify({ _documents }),
-
@user1987392 你看,这就是问题所在,JSON.stringify() 不能用于 File 对象(不记得为什么),当我这样做时它只返回和空数组
-
在你的 AJAX
data: JSON.stringify(_documents, null, 4)中替换它,它会正常工作 -
@KunalMukherjee 我试过了,但控制器收到一个空值
-
我很确定你需要使用 FormData 来让它工作
标签: c# jquery ajax model-view-controller