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

.NET Core中Ajax传大量对象列表至控制器时接收为Null的问题

.NET Core Ajax传大量对象列表时控制器接收为Null的解决方向

以下是针对你遇到问题的几个排查和解决方向:

1. 调整请求大小限制

ASP.NET Core默认对POST表单数据的大小有限制,当数据量超过阈值时会被截断,直接导致模型绑定失败,接收的列表为Null。

  • 局部配置(针对单个Action):在目标Action上添加[RequestSizeLimit]特性,设置合适的大小(示例为10MB):

    [HttpPost]
    [RequestSizeLimit(10485760)] // 10MB,可根据实际数据量调整
    public IActionResult LoadCalendar(List<CalendarListViewModel> calendarList)
    {
        // 业务逻辑代码
    }
    
  • 全局配置(适用于所有请求):在Program.cs中配置FormOptions,放宽长度和计数限制:

    builder.Services.Configure<FormOptions>(options =>
    {
        options.MultipartBodyLengthLimit = 10485760; // 10MB
        options.ValueLengthLimit = int.MaxValue;
        options.ValueCountLimit = int.MaxValue;
    });
    

2. 改用JSON格式发送请求

当前Ajax以默认表单编码格式发送大量数据,容易出现解析问题。改为JSON格式传输更稳定:

  • 修改Ajax配置,指定contentType并序列化数据:

    function LoadCalendarForDesktop(pageNumber, pageSize, calendarList, pageCounter) {
        $.ajax({
            type: 'POST',
            url: '@Url.Action("LoadCalendar", "LPProductManagement")',
            data: JSON.stringify({ calendarList: calendarList }),
            contentType: "application/json",
            cache: false,
            async: false,
            success: function (data) {
                // 成功回调逻辑
            }
        });
    }
    
  • 控制器Action添加[FromBody]特性,确保从请求体读取JSON数据:

    // 推荐使用包装类接收,避免直接传列表的绑定问题
    public class CalendarRequest
    {
        public List<CalendarListViewModel> CalendarList { get; set; }
    }
    
    [HttpPost]
    public IActionResult LoadCalendar([FromBody] CalendarRequest request)
    {
        var calendarList = request.CalendarList;
        // 业务逻辑
    }
    

3. 排查JSON序列化/反序列化问题

前端数据看似正常,但可能存在日期格式、特殊字符等问题导致后端反序列化失败:

  • 配置全局JSON序列化规则,统一日期格式并保持属性名一致:

    builder.Services.AddControllersWithViews()
        .AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.PropertyNamingPolicy = null; // 保持属性名大小写与ViewModel一致
            options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
            // 指定日期格式,避免解析错误
            options.JsonSerializerOptions.DateTimeFormat = new JsonDateFormatInfo
            {
                DateFormatString = "yyyy-MM-dd"
            };
        });
    
  • 手动接收并解析JSON,排查反序列化错误:

    [HttpPost]
    public async Task<IActionResult> LoadCalendar()
    {
        using var reader = new StreamReader(Request.Body);
        var rawJson = await reader.ReadToEndAsync();
        // 手动反序列化,可在这里打断点查看JSON内容和解析结果
        var calendarList = JsonSerializer.Deserialize<List<CalendarListViewModel>>(rawJson);
        // 后续逻辑
    }
    

4. 检查视图模型属性绑定

确认视图模型的所有属性都能被正确绑定:

  • 检查DateTime类型属性是否有合法的日期值,避免传入无效格式的日期
  • 确保布尔类型、字符串类型的属性没有无法被解析的异常值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 17:35:53