如何通过jQuery向ASP.NET MVC控制器发送对象列表和图片数据
解决方案
你需要按照ASP.NET MVC默认模型绑定的命名规则,手动将所有字段填充到FormData中即可正常绑定,无需额外序列化操作,具体实现如下:
1. 前端构造FormData代码
// 初始化FormData对象 var formData = new FormData(); // 填充Research对象的基础属性 formData.append('Research.Id', idInput.val()); formData.append('Research.Title', titleInput.val()); formData.append('Research.Abstract', abstractInput.val()); formData.append('Research.Body', bodyInput.val()); // 填充图片文件 if (imageInput.get(0).files.length > 0) { formData.append('Research.ImageFile', imageInput.get(0).files[0]); } // 填充ResearchAuthors列表,必须带索引后缀匹配MVC列表绑定规则 $('#authors-tbody tr').each(function (index) { var authorId = $(this).children('.id-td').text(); var raId = $(this).children('.researchAuthorsId-td').text(); var researchId = idInput.val(); formData.append(`ResearchAuthors[${index}].Id`, raId); formData.append(`ResearchAuthors[${index}].AuthorId`, authorId); formData.append(`ResearchAuthors[${index}].ResearchId`, researchId); });
2. 提交AJAX请求配置
$.ajax({ url: '/你的控制器名称/Create', type: 'POST', data: formData, // 必须添加以下两个配置,禁止jQuery自动处理数据和修改请求头 contentType: false, processData: false, success: function (res) { // 自定义提交成功逻辑 console.log(res.message); }, error: function (err) { // 自定义提交失败逻辑 } });
注意事项
- 列表字段的索引必须从0开始连续递增,不能中断,否则MVC会停止绑定后续的列表项
- 如果你使用的是ASP.NET Core,绑定规则完全一致,只需将后端的
HttpPostedFileWrapper替换为IFormFile即可 - 不需要修改现有控制器、ViewModel的任何代码,前端按上述规则传值即可正常完成模型绑定
内容的提问来源于stack exchange,提问作者Abdirahman Ali
相关产品推荐
相关产品推荐

