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

AJAX获取数组值时ID返回undefined,控制器端值正常

解决AJAX获取JSON时ID返回undefined的问题

看起来你遇到的问题大概率是JSON序列化的大小写转换导致的,这在ASP.NET(Core)里很常见,我来帮你拆解原因和解决方案:

核心原因

C#里你定义的匿名类字段是ID(PascalCase命名),但默认情况下,ASP.NET的JSON序列化器(不管是System.Text.Json还是Newtonsoft.Json)会自动把PascalCase转换为camelCase(也就是小写开头的id)。而你的前端AJAX代码里应该是用item.ID去访问这个字段,自然就找不到,返回undefined了。

你可以先快速验证这个问题:打开浏览器开发者工具(按F12),切换到「Network」标签,找到GetEvents的请求,查看返回的JSON响应,你会看到ID字段的键其实是"id"而不是"ID"。

解决方案(任选其一即可)

方案1:前端调整字段名(最简单)

直接在AJAX的回调里用小写的id去访问,比如把原来的item.ID改成item.id:

// 假设你原来的遍历代码是这样的
$.each(events, function(index, item) {
    console.log(item.id); // 替换原来的item.ID即可正常获取值
});

方案2:后端修改序列化配置,保持PascalCase

如果你希望后端返回的JSON字段名和C#里的一致(都是PascalCase),可以在项目的配置里修改序列化规则:

如果你用的是ASP.NET Core + System.Text.Json

在Program.cs里添加如下配置:

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        // 关闭自动大小写转换,保持原字段名的大小写
        options.JsonSerializerOptions.PropertyNamingPolicy = null;
    });

如果你用的是Newtonsoft.Json(比如旧版ASP.NET或手动引入的)

在Program.cs(或Startup.cs)里配置:

builder.Services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        // 使用默认契约解析器,不转换字段名大小写
        options.SerializerSettings.ContractResolver = new DefaultContractResolver();
    });

方案3:单独指定ID字段的序列化名称

如果只需要让ID字段保持大写,其他字段保持默认的camelCase,可以给匿名类的ID字段加特性标记:

用System.Text.Json的情况

using System.Text.Json.Serialization;

// ...

var events = _context.Project.Select(s => new {
    [JsonPropertyName("ID")] // 指定序列化后的字段名为ID
    ID = s.ID,
    onSite = s.OnSite,
    onSiteTill = s.OnSiteTill,
    Number = s.Number,
    Type = s.Type,
}).ToList();

用Newtonsoft.Json的情况

using Newtonsoft.Json;

// ...

var events = _context.Project.Select(s => new {
    [JsonProperty("ID")] // 指定序列化后的字段名为ID
    ID = s.ID,
    onSite = s.OnSite,
    onSiteTill = s.OnSiteTill,
    Number = s.Number,
    Type = s.Type,
}).ToList();

额外提示

以后遇到这类字段不匹配的问题,第一步先看浏览器Network面板里的实际JSON响应内容,对比前端代码里的字段名,基本上就能快速定位问题啦。

内容的提问来源于stack exchange,提问作者Marek Špeta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:41:42