MVC Core中Kendo Upload通过Ajax Post上传文件数据为空排查
解决Kendo Upload + Ajax Post上传时后端接收数据为空的问题
我仔细看了你的代码,问题出在上传数据的封装方式上——直接把文件和参数放在普通对象里传给Ajax的data属性,是无法被ASP.NET Core后端正确解析的。上传文件必须用FormData对象来包装数据,这样才能符合multipart/form-data的请求格式,后端才能读取到IFormFile和其他参数。
问题原因分析
你当前的Ajax请求中,直接把fileUpload: files[0].rawFile这类数据放在普通对象里,虽然设置了processData: false和contentType: false,但jQuery不会自动把这个对象转换成符合要求的表单数据格式,导致后端无法识别传入的文件和参数,所以接收的值都是空的。
修复方案
修改前端代码,使用FormData来封装文件和参数,具体步骤如下:
- 创建
FormData实例,逐个添加文件和额外参数 - 保持
processData: false和contentType: false的配置(这两个配置是必须的,防止jQuery破坏FormData的结构)
修改后的完整前端代码:
$(function () { $("#uploadForm").submit(function (e) { e.preventDefault(); var upload = $("#fileUpload").data("kendoUpload"), files = upload.getFiles(); // 先检查是否有选中文件 if (files.length === 0) { alert("请选择要上传的文件"); return; } // 初始化FormData对象 const formData = new FormData(); // 添加文件:键名必须和后端参数名(fileUpload)完全一致 formData.append("fileUpload", files[0].rawFile); // 添加其他参数 formData.append("RmclientAccid", "1"); formData.append("AsAtDate", "testdate"); $.ajax({ type: 'POST', url: '/RmReportTasks/UploadFile/', processData: false, // 禁止jQuery处理FormData(避免转成字符串) contentType: false, // 让浏览器自动设置正确的Content-Type(包含boundary) data: formData, success: function (data) { console.log("上传成功:", data); }, error: function (err) { console.log("上传失败:", err); } }); }); });
额外说明
- 如果需要上传多个文件,只需要循环
files数组,逐个调用formData.append("fileUpload", file.rawFile)即可,后端的IEnumerable<IFormFile>会自动接收所有文件。 - 后端代码不需要修改,只要参数名和FormData里的键名一致就能正常接收数据。
这样修改后,你的后端就能正确获取到上传的文件和参数了。
内容的提问来源于stack exchange,提问作者Suneel Joshi
相关产品推荐
相关产品推荐

