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

如何通过FormData向MVC控制器传递嵌套对象?接收时对象始终为空

解决FormData发送嵌套对象到MVC控制器时对象为null的问题

我太懂你这种卡壳的感觉了——用FormData发数据,数组能正常接收,但嵌套的details对象始终是null,折腾半天找不到问题。其实核心原因是FormData本身不支持直接的嵌套对象自动绑定,MVC的模型绑定器需要特定的字段命名格式才能识别嵌套属性。

问题根源

你现在的代码是直接把personfood.details的属性以firstname、lastname这类键名追加到FormData里,但MVC的模型绑定器期望的是details.firstname(或者details[firstname])这样的键名,只有这样它才能把值映射到personfoods.details.firstname这个嵌套属性上。

解决方案:调整FormData的键名格式

只需要修改你追加details属性的代码,给每个属性键名加上details.前缀就行,具体修改如下:

修改后的jQuery代码

function addstudent() {
 var form= $("#studentform").valid();
 if (form) {
 personfood.details.firstname = $("#firstname").val();
 personfood.details.lastname = $("#lastname").val();
 personfood.details.imageuploaded = $("#imageupload")[0].files[0];
 personfood.details.rememberme = $("#rememberme").is(":checked");
 personfood.details.newsletter = $("#newsletter").is(":checked");
 personfood.details.gender = $("input[name='gender']").val();
 var personfoods = new FormData();
 // 关键修改:给details的属性加上"details."前缀
 $.each(personfood.details, function (key, value) {
 personfoods.append("details." + key, value);
 });
 $.each(personfood.foodname, function (key, value) {
 personfoods.append("foodname["+key+"]", value);
 });
 for (var pair of personfoods.entries()) {
 console.log(pair[0] + ', ' + pair[1]);
 // 现在会输出类似 "details.firstname, xxx" 的字段,绑定器能识别了
 }
 $.ajax({
 url: "/Main/addperson",
 type: "POST",
 processData: false,
 cache: false,
 contentType: false,
 dataType: "json",
 data: personfoods,
 success: onsucessinsert,
 error: onerrorinsert
 })
 }
}

为什么这样能行?

MVC的模型绑定器会根据请求字段名和ViewModel的属性路径匹配:

  • 当它看到details.firstname这个字段时,会自动定位到personfoods对象下的details属性,再把值赋值给details的firstname属性
  • 你的foodname数组格式是对的,所以之前能正常接收,不需要改动

额外说明

  • 对于文件上传字段imageuploaded,修改后的键名是details.imageuploaded,和ViewModel中details的imageuploaded属性名完全匹配,绑定器能正确识别并绑定为HttpPostedFileBase对象
  • 你也可以用details[key]的格式(比如details[firstname]),效果和details.firstname一致,MVC绑定器两种格式都支持

这样修改后,控制器应该就能正常接收完整的personfoods对象了,包括嵌套的details和foodname数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:44:32