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

ASP.NET Core中使用AJAX上传文件控制器接收值为null如何解决

问题原因

你当前的代码存在两处核心错误导致控制器无法接收到文件:

  1. 直接通过$("#fileUpload").val()仅能获取本地文件路径字符串,不是浏览器可传递的二进制文件对象,无法被ASP.NET Core解析为IFormFile类型
  2. 提交二进制文件必须使用FormData对象封装参数,普通JS对象序列化后无法传输文件内容

修复步骤

1. 调整JavaScript提交逻辑

将参数封装为FormData对象,同时保留contentType: false和processData: false配置:

function Insert() {
    event.preventDefault();
    // 基于现有表单创建FormData,自动识别其中的文件字段
    var formData = new FormData(document.getElementById("formRequestLeave2"));
    // 追加表单外的其他字段,注意字段名要和ViewModel属性名完全匹配
    formData.append("EmployeeId", $("#employeeId2").val());
    formData.append("manager", $("#managerName2").val());

    $.ajax({
        url: "/LeaveDetails/LeaveRequest",
        type: "POST",
        data: formData,
        contentType: false,
        processData: false,
        success: function(result) {
            // 处理接口返回逻辑
        }
    })
}

2. 确认ViewModel定义合规

检查LeaveRequestVM类的File属性类型为IFormFile,且属性名与前端文件输入框的name属性一致:

public class LeaveRequestVM
{
    // 其他字段保持原有定义
    public IFormFile File { get; set; }
}

3. 控制器可选配置

如果仍接收不到文件,可在Action参数前添加[FromForm]注解,强制框架从表单数据中解析参数:

public JsonResult LeaveRequest([FromForm] LeaveRequestVM leaveRequestVM)

额外注意:保存文件前请确认wwwroot/files目录存在,否则文件写入步骤会抛出异常。


内容的提问来源于stack exchange,提问作者besok uas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:06:00