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

$.ajax请求中C#枚举Gender显示undefined如何正确渲染至td

问题根因

Gender字段显示为undefined通常由两个原因导致:

  • 后端C#模型属性默认采用帕斯卡命名法(首字母大写为Gender),如果没有配置Json序列化的驼峰命名规则,接口返回的字段名是大写开头的Gender,前端写data.gender自然取不到值。
  • 默认情况下.NET序列化枚举会返回数字值(0对应Male,1对应Female),就算字段名写对了,也不会直接显示Male/Female文本。
修复方案

可任选前端或后端方案修复:

方案1:纯前端修复(无需改动后端代码)

先兼容大小写字段取值,再加一层枚举值映射,把数字/枚举字符串统一转成目标显示文本,修改ajax成功回调逻辑即可:

success: function(data) {
  $("#leagueTBody").html("");
  $("#leagueId").val(leagueId);
  // 枚举值映射表,兼容数字、字符串两种返回格式
  const genderTextMap = {
    0: "Male",
    1: "Female",
    "Male": "Male",
    "Female": "Female"
  };
  // 兼容大小写字段,取不到值默认显示未知
  const showGender = genderTextMap[data.Gender ?? data.gender] ?? "未知";

  $("#leagueTBody").append("<tr><td>" + data.id + "</td>" +
    "<td>" + data.leagueType + "</td>" +
    " <td> " + data.season.name + "</td>" + " <td> " + showGender + "</td>" + " <td> " +
    data.note + "</td>" +
    "</tr >");
},

方案2:后端配置序列化(一劳永逸,推荐)

在后端项目的Program.cs中配置Json序列化规则,统一将枚举转为字符串返回、自动将帕斯卡属性名转为前端常用的小驼峰格式,后续所有接口都不用再单独处理字段名和枚举值问题:
如果用系统自带的System.Text.Json:

builder.Services.AddControllersWithViews()
    .AddJsonOptions(opt =>
    {
        // 枚举序列化为字符串而非数字
        opt.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
        // 属性名自动转小驼峰
        opt.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
    });

如果用Newtonsoft.Json做序列化:

builder.Services.AddControllersWithViews()
    .AddNewtonsoftJson(opt =>
    {
        opt.SerializerSettings.Converters.Add(new StringEnumConverter());
        opt.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
    });

配置完成后,接口返回的data.gender会直接是"Male"或"Female"字符串,原有前端代码不用加映射就能正常显示。

排查小技巧:按F12打开浏览器开发者工具,在Network面板找到DeleteLeague接口的响应内容,直接看实际返回的字段名和值格式,就能快速定位是字段名写错还是值格式的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:39:03