上传的文件,我有这样的代码提交,无法绑定表单数据和控制器
$('#form').on('submit',function (e) {
e.preventDefault();
//var file = $("#productImg");
var fileUpload = $("#productImg").get(0);
var files = fileUpload.files;
var form = $("#form");
var formData = new FormData();
formData.append("product", form.serialize());
// Looping over all files and add it to FormData object
for (var i = 0; i < files.length; i++) {
formData.append(files[i].name, files[i]);
}
//formData.append("file", file);
$.ajax({
type: 'POST',
url: baseUrl + 'Controller/Action',
data: formData,
processData: false,
contentType: false,
success: function (data) {
}
});
});
这是我的控制器:
public JsonResult AddProduct(ProductModel product) // data is binded in the model if I remove content type property
{
var isSuccess = false;
if (product != null)
{
try
{
if (Request.Files.Count > 0) // works ok if I added the content type property
{
var sadas = "sad";
}
所以这里发生了什么是我的serialized form
数据发送到MVC控制器连同上传的文件。
这里的问题是,当我添加此ajax属性contentType: false,
,我可以成功回发文件,但绑定模型为空。
另一方面,如果我删除此属性,绑定模型工作正常。但问题是文件没有在服务器中发送。
我该如何做这项工作?我希望表单和图像在服务器端发送。
UPDATE 这是现在的工作,我唯一改变的行都是这样的
formData.append("product", form.serialize());
TO
var other_data = $('#addProductForm').serializeArray(); $.each(other_data, function (key, input) { formData.append(input.name, input.value); });
有人能解释发生了什么事?我不知道
假设fil输入也在你的form标签中,那么你所需要的就是'var formData = new FormData($(“#form”).get(0));' - 参考[this answer](http:// stackoverflow.com/questions/29293637/how-to-append-whole-set-of-model-to-formdata-and-obtain-it-in-mvc/29293681#29293681) –
@StephenMuecke谢谢!这可以简化我的代码 – Sherlock