You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC中通过Ajax携带多参数上传文件报错求助

问题分析与修正方案

核心问题点

  • Ajax请求错误地将FormData包裹在普通对象中,导致后端无法解析文件数据
  • 未配置processData: false和contentType: false,这是Ajax上传文件的必要设置
  • FormData中的键名与控制器参数名不匹配(MyImages vs ForUpload)

修正后的前端代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:11:14