【发布时间】:2020-07-04 17:14:28
【问题描述】:
我一直在尝试使用 ajax 向我的 MVC 控制器发送每行包含一个文件的多行(请参见上图)。 JavaScript 代码-
var formData = new FormData();
$('#assFileTable tbody tr').each(function (index, item) {
var tr = $(this);
var description = tr.find('.dTableDescription').val();
var docType = tr.find('.dTableDocType').val();
var attachment = $('#row-' + index + '-Attachment').get(0).files[0];
var assoFile = {
Description: description,
DocTypeId: docType,
Attachment: attachment
};
formData.append('assoFiles', assoFile);
});
var request = new Request('/Setting/SaveAssociatedFiles/', {
method: 'POST',
body: formData
});
fetch(request).then(response => console.log(response.json()));
控制器方法-
public ActionResult SaveAssociatedFiles(List<TaskAssociatedFileViewModel> assoFiles)
{
}
型号-
public class TaskAssociatedFileViewModel
{
public string Description { get; set; }
public int DocTypeId { get; set; }
public string FilePath { get; set; }
public HttpPostedFileBase Attachment { get; set; }
}
控制器方法被调用,但得到 null 而不是发送的数据。我错过了什么还是我必须做不同的事情?
【问题讨论】:
-
尝试在模型中不包含文件/附件属性的情况下缩小范围,确定它肯定只是导致问题的文件。
-
formData.append('assoFiles'developer.mozilla.org/en-US/docs/Web/API/FormData/append append() 会将新值附加到现有值集的末尾。 - 但是您的 MVC 控制器无法知道这一点. -
鉴于上述情况-仅尝试一行(无文件)-如果可行但不适用于多行(无文件),那么您的问题是
formData.append将您的所有值放入同一把钥匙。 MVC 控制器需要一个 array 值。
标签: javascript jquery ajax asp.net-mvc file-upload