不幸的是,jQuery
serialize()方法将不包含输入文件元素。因此,您的文件不会包含在序列化值中。
您可以做的是创建一个
FormData对象,然后将文件附加到该对象。您还需要将表单字段值附加到此相同的FormData对象。您可以简单地遍历所有输入字段并将其添加。
将文件添加到表单数据时,需要提供一个名称,该名称将与将在HttpPost操作方法中使用的参数匹配。
这应该工作。
var fileUpload = $("#productImg").get(0);var files = fileUpload.files;var formData = new FormData();// Looping over all files and add it to FormData object for (var i = 0; i < files.length; i++) { console.log('(files[i].name:' + files[i].name); formData.append('productImg', files[i]);}// You can update the jquery selector to use a css class if you want$("input[type='text'").each(function (x, y) { formData.append($(y).attr("name"), $(y).val());});$.ajax({ type: 'POST', url: 'ReplaceHereYourUrltotheActionMethod', data: formData, processdata: false, contentType: false, success: function (data) { }});以及您的操作方法,您可以添加另一个参数类型
IEnumerable<HttpPostedFilebase>,其名称与我们设置为表单数据的名称相同
productImg。
[HttpPost]public virtual ActionResult Index(ProductModel model, IEnumerable<HttpPostedFilebase> productImg){ // to do :Look through productImg and do something }


