【发布时间】:2016-12-06 18:57:16
【问题描述】:
我有这个提交代码,
$('#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,时,我可以成功回发文件,但是绑定的模型是空的。
另一方面,如果我删除这个属性,绑定的模型就可以正常工作。但问题是文件没有在服务器中发送。
我怎样才能做到这一点?我希望在服务器端发送表单和图像。
更新 这现在可以工作了,我唯一改变的就是这个
formData.append("product", form.serialize());
到
var other_data = $('#addProductForm').serializeArray();
$.each(other_data, function (key, input) {
formData.append(input.name, input.value);
});
有人可以解释发生了什么吗?我不知道
【问题讨论】:
-
假设 fil 输入也在您的表单标签中,那么您只需要
var formData = new FormData($("#form").get(0));- 请参阅this answer -
@StephenMuecke 谢谢!这可以简化我的代码
标签: c# jquery ajax asp.net-mvc-3