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

使用Ajax传递对象列表至Controller时接收数据为Null的问题

问题原因及解决方法

核心问题:模型绑定失败导致接收对象为Null

你的代码中存在前后端数据类型不匹配的问题,ASP.NET Core的模型绑定器无法将前端传递的JSON正确转换为后端模型,最终导致dentalCaseList为Null。具体问题点如下:

  1. UnitType类型不匹配:前端下拉框的val()返回字符串类型值(如"1"),但后端DentalCase类的UnitType是枚举类型,默认序列化器无法直接将字符串转为枚举。
  2. Date值无效:前端传递空字符串"",后端是DateTime?类型,空字符串无法转换为可空DateTime类型,触发绑定错误。
  3. 集合属性未初始化:DentalCaseList的DentalCases属性没有默认初始化,可能影响绑定后的集合实例化。

解决步骤

1. 修正前端数据类型

修改JS代码,确保传递的数据类型与后端模型匹配:

$('form').submit(function (e) {
    e.preventDefault();
    var dentalCaseList = {
            DentalCases: []
    };
    
    $("tr[class*=dentalCase]").each(function (index, e) {
        let dentalCase = {
            Date: null, // 改为null,而非空字符串
            UnitCount: 0,
            UnitType: 0,
            Name: "",
            FullPath: "",
        };

        dentalCase.Name = $(this).find(".unitName").html(),
        dentalCase.UnitType = parseInt($(this).find(".select-unit").val()), // 转为数字类型
        dentalCase.UnitCount = parseInt($(this).find(".unitCount").html())

        dentalCaseList.DentalCases.push(dentalCase);
    });

    $.ajax({
        type: "POST",
        url: "/DentalCase/GenerateReport",
        dataType: "json",
        data: JSON.stringify(dentalCaseList),
        contentType: "application/json; charset=utf-8",
        success: function (result) {
            console.log('Data received: ');
            console.log(result);
        },
        error: function(xhr){
            // 新增错误回调,查看绑定错误信息
            console.log(xhr.responseText);
        }
    })
});

2. 初始化后端模型的集合属性

修改DentalCaseList类,确保集合属性默认初始化:

public class DentalCaseList
{
    public List<DentalCase> DentalCases { get; set; } = new List<DentalCase>();
}

3. 可选:支持枚举字符串绑定(如果需要)

如果希望前端传递枚举名称(如"FullDesign")而非数字,可在Program.cs中配置序列化器支持字符串枚举:

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
    });

4. 添加模型状态检查(用于排查问题)

在Controller中添加模型状态验证,快速定位绑定错误:

[HttpPost]
public JsonResult GenerateReport([FromBody] DentalCaseList dentalCaseList)
{
    if (!ModelState.IsValid)
    {
        var errors = ModelState.Values
            .SelectMany(v => v.Errors)
            .Select(e => e.ErrorMessage);
        return Json(new { Success = false, Errors = errors });
    }
    
    // 原有业务逻辑
    List<DentalCase> ObjEmp = new List<DentalCase>()
    {    
        new DentalCase {Name="Testing Tester",UnitCount=1,UnitType=UnitType.Default },
        new DentalCase {Name="Banana",UnitCount=2,UnitType=UnitType.Default }
    };
    return Json(ObjEmp);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:23:16