ASP.Net Core 6.0中用jQuery提交文件至控制器遇问题求助
问题分析与修复方案
第一个问题:$.post提交时控制器无法接收文件
你用$.post的写法完全错误:
$.post默认会把传入的对象序列化为application/x-www-form-urlencoded格式,这种格式根本没法传输文件- 你还把
FormData对象包装到{files: formData}里,这会导致FormData被转成字符串,彻底丢失文件数据
第二个问题:$.ajax提交时出现FormData相关错误
出现'append' called on an object that does not implement interface FormData错误,大概率是这两个原因:
- 没有阻止表单的默认提交行为,页面刷新导致脚本执行中断,
formData对象被提前销毁 - 回调函数里误用了未定义的
response变量(你定义的参数是result)
修复后的完整代码
$("#setting-form").on("submit", function(event) { // 必须阻止表单默认提交行为,否则页面会刷新 event.preventDefault(); var formData = new FormData(); var fileInput = document.getElementById('site-error-image-input'); if (fileInput.files.length > 0) { var file = fileInput.files[0]; formData.append("files", file); $.ajax({ type: 'POST', url: '/Admin/Home/SaveSiteErrorImage', data: formData, processData: false, // 禁止jQuery处理FormData,否则会破坏文件结构 contentType: false, // 让浏览器自动设置正确的multipart/form-data请求头 success: function(result) { if (result.trim() !== '') { var filePathInput = document.getElementsByName("Settings[64].SettingString")[0]; filePathInput.value = result; // 用value属性比setAttribute更直接 } }, error: function(xhr, status, err) { // 可以加个错误提示,方便调试 console.error('上传失败:', err); } }); } });
额外注意事项
- 确保你的ASP.NET Core控制器路由正确,
/Admin/Home/SaveSiteErrorImage能匹配到对应的方法 - 控制器方法里的
IList<IFormFile> files参数名和FormData里的键"files"完全一致,否则无法绑定 - 如果是单文件上传,也可以用
IFormFile file作为参数,对应的FormData键改成"file"
内容的提问来源于stack exchange,提问作者Na...
相关产品推荐
相关产品推荐

