jquery 尝试使用 AJAX 向我的控制器传递对象列表会产生空数据

hof1towb  于 2023-08-04  发布在  jQuery
关注(0)|答案(1)|浏览(99)

我正在向我的控制器传递JSON中的对象列表,通信似乎正在工作,但我正在传递的进入我的控制器的数据是空的。我已经搜索了这么多不同的职位,都指向类似的问题,我已经调整和尝试不同的方法。这是我的JS代码:

$('form').submit(function (e) {
    e.preventDefault();
    var dentalCaseList = {
            DentalCases: []
    };
    
    $("tr[class*=dentalCase]").each(function (index, e) {
        let dentalCase = {
            Date: "",
            UnitCount: 0,
            UnitType: "",
            Name: "",
            FullPath: "",
        };

        dentalCase.Name = $(this).find(".unitName").html(),
        dentalCase.UnitType = $(this).find(".select-unit").val(),
        dentalCase.UnitCount = parseInt($(this).find(".unitCount").html())

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

    var myJsonString = JSON.stringify(dentalCaseList);

    $.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);
        }
    })
        
});

字符串
这是我的控制器:

using DentalManager.Model;
using Microsoft.AspNetCore.Mvc;

namespace DentalManager.Controllers
{
    public class DentalCaseController : Controller
    {
        [HttpPost]
        public JsonResult GenerateReport([FromBody] DentalCaseList dentalCaseList)
        {
            //Creating List    
            List<DentalCase> ObjEmp = new List<DentalCase>()
            {    
                //Adding records to list    
                new DentalCase {Name="Testing Tester",UnitCount=1,UnitType=UnitType.Default },
                new DentalCase {Name="Banana",UnitCount=2,UnitType=UnitType.Default }
            };
            //return list as Json    
            return Json(ObjEmp);
        }
    }
}

dentalCaseList传入null

这是我的模型:

namespace DentalManager.Model
{
    public class DentalCase
    {
        [JsonPropertyName("Date")]
        public DateTime? Date { get; set; }

        [JsonPropertyName("UnitCount")]
        public int UnitCount { get; set; }

        [JsonPropertyName("UnitType")]
        public UnitType UnitType { get; set; }

        [JsonPropertyName("Name")]
        public string? Name { get; set; }

        [JsonPropertyName("FullPath")]
        public string? FullPath { get; set; }
    }

    public enum UnitType
    {
        Default = 0,
        FullDesign = 1,
        Implant = 2
    }

    public class  DentalCaseList
    {
        public List<DentalCase> DentalCases { get; set; }
    }
}


我已经尝试了名称更改,包括FromBody属性,JsonPropertyName属性,删除可空类型,双重和三重检查属性名称。我只是不明白我错过了什么。我很抱歉,如果这是一个贫穷的职位,这是我的第一个。但我只是在挣扎,我觉得我错过了一些愚蠢的事情。

zsbz8rwp

zsbz8rwp1#

你必须在Json.Text序列化器中添加一个枚举序列化器。修复您的启动代码

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

// or maybe services.Add...

字符串
并且您的json字符串具有Date:“",这对于此属性无效

public DateTime? Date { get; set; }


修复json字符串Date:null,或将Date属性更改为string,或为Date属性创建自定义序列化程序

相关问题