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

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();
}

额外验证建议

  1. 打开浏览器开发者工具(F12),在Network标签下查看AJAX请求的Payload,确认JSON格式正确、属性名和数据类型无误。
  2. 若仍有问题,检查模型类中未赋值的属性(如settingId),可改为可空类型避免绑定失败:
public int? settingId { get; set; }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 08:32:04