Unfortunately the jQuery serialize()
method will not include input file elements. So your files are not going to be included in the serialized value.
What you can do is, creating a FormData
object, append the files to that. You need to append the form field values as well to this same FormData object. You may simply loop through all the input field and add it.
When you add the files to form data, you need to give a name which will match with the parameter you will use in your HttpPost action method.
This should work.
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) {
}
});
and your action method, You can add another parameter of type IEnumerable<HttpPostedFileBase>
with the name same as what we set to form data, which is productImg
.
[HttpPost]
public virtual ActionResult Index(ProductModel model,
IEnumerable<HttpPostedFileBase> productImg)
{
// to do :Look through productImg and do something
}