ASP.Net Core MVC中View向Controller传对象集合为空问题求助
解决ASP.Net Core MVC中AJAX传递集合对象到Controller为空的问题
问题根源及修复步骤
1. 参数名称不匹配(核心问题)
你当前AJAX请求传递的JSON结构是{"newDoorData": [你的数组]},但Controller的参数名为model,模型绑定无法将newDoorData映射到model。同时,ASP.NET Core接收JSON格式数据时,需要明确指定从请求体读取,需添加[FromBody]特性。
修改方案二选一:
方案一:直接传递数组
// 修改AJAX的data部分,直接序列化数组 data: JSON.stringify(newDoorData),
对应Controller代码:
[HttpPost] public ActionResult SaveSettings([FromBody] vmNewDoor[] model) { // 处理逻辑 }
方案二:保持对象结构,同步参数名
// 保持原有data代码:JSON.stringify({ newDoorData })
对应Controller代码:
[HttpPost] public ActionResult SaveSettings([FromBody] vmNewDoor[] newDoorData) { // 处理逻辑 }
2. 属性大小写不一致
JS中定义的settingname是全小写,而模型类里是settingName(驼峰命名),虽然ASP.NET Core模型绑定默认不区分大小写,但统一命名能避免潜在问题:
// 修改JS中的属性名,和模型类保持一致 customModel.settingName = data[9];
3. 数据类型转换问题
从DataTable获取的data[0]、data[1]是字符串类型,但模型类中siteCode、legacyDoor是int类型,直接赋值会导致类型不匹配,模型绑定失败,需手动转换为数字:
customModel.siteCode = parseInt(data[0]); customModel.legacyDoor = parseInt(data[1]);
完整修改后的代码
Index.cshtml的JS代码
function SaveNewDoor() { var newDoorData = []; var table1 = $('#newTable').DataTable(); table1.rows().every(function (rowIdx, tableLoop, rowLoop) { var data = this.data(); var customModel = new Object(); customModel.siteCode = parseInt(data[0]); customModel.legacyDoor = parseInt(data[1]); customModel.brand = data[6]; customModel.buyingGroup = data[7]; customModel.settingName = data[9]; newDoorData.push(customModel); }); $.ajax({ url: '@Url.Action("SaveSettings", "DOOR_MANAGEMENT")', type: 'POST', contentType: 'application/json', data: JSON.stringify(newDoorData), success: function (result) { alert('Door Data changes saved'); }, error: function (xhr, status, error) { console.log("Error:", error); console.log("Status:", status); console.log("XHR:", xhr); } }); }
Controller代码
[HttpPost] public ActionResult SaveSettings([FromBody] vmNewDoor[] model) { if (model != null && model.Length > 0) { // 执行数据库保存逻辑 } return Ok(); }
额外验证建议
- 打开浏览器开发者工具(F12),在Network标签下查看AJAX请求的Payload,确认JSON格式正确、属性名和数据类型无误。
- 若仍有问题,检查模型类中未赋值的属性(如
settingId),可改为可空类型避免绑定失败:
public int? settingId { get; set; }
内容的提问来源于stack exchange,提问作者Sofiya kalan
相关产品推荐
相关产品推荐

