ASP.NET Core中使用AJAX上传文件控制器接收值为null如何解决
问题原因
你当前的代码存在两处核心错误导致控制器无法接收到文件:
- 直接通过
$("#fileUpload").val()仅能获取本地文件路径字符串,不是浏览器可传递的二进制文件对象,无法被ASP.NET Core解析为IFormFile类型 - 提交二进制文件必须使用
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
相关产品推荐
相关产品推荐

