ASP.NET MVC中通过Ajax携带多参数上传文件报错求助
问题分析与修正方案
核心问题点
- Ajax请求错误地将
FormData包裹在普通对象中,导致后端无法解析文件数据 - 未配置
processData: false和contentType: false,这是Ajax上传文件的必要设置 - FormData中的键名与控制器参数名不匹配(
MyImagesvsForUpload)
修正后的前端代码
1. 文件存入FormData的代码
var data2 = new FormData(); var files; var loadFile = function (event) { files = $("#upload").get(0).files; if (files.length > 0) { // 键名改为和控制器参数一致的ForUpload data2.append("ForUpload", files[0]); } };
2. Ajax发送请求的代码
如果需要携带多个参数,直接把参数追加到FormData中即可:
// 先添加额外参数 data2.append("Title", "New name"); $.ajax({ url: "/Adot/UploadAdopt", type: "POST", data: data2, // 直接传入FormData,不要包裹在对象里 // 必须配置这两项,避免jQuery自动处理数据格式 processData: false, contentType: false, success: function (response) { console.log(response); }, error: function(xhr, status, error) { console.error("上传失败:", error); } });
控制器代码优化(可选)
添加空值判断,避免空引用异常:
[HttpPost] public JsonResult UploadAdopt(HttpPostedFileBase ForUpload, string Title) { if (ForUpload != null && ForUpload.ContentLength > 0) { string path = Path.Combine(Server.MapPath("~/image/adopts"), Path.GetFileName(ForUpload.FileName)); ForUpload.SaveAs(path); } return Json("上传完成", JsonRequestBehavior.AllowGet); }
内容的提问来源于stack exchange,提问作者Ann
相关产品推荐
相关产品推荐

