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

Blazor调用Enum.GetName显示枚举值为空问题排查

Blazor 枚举值渲染空白问题排查修复

问题表现

  • Blazor WebClient 项目UI层需要展示枚举值,运行时给对应属性赋值后,页面枚举展示位置无内容
  • 页面加载全程无报错抛出,初始实现的Razor组件代码如下:
<div>
    <p>Nationality: @Enum.GetName(typeof(Nationality), user.Nationality).ToString()</p>
    <p>Favourite Medium: @Enum.GetName(typeof(Medium), user.FavouriteMedium).ToString()</p>
</div>

@code {
    [Parameter]
    public UserViewModel user {get; set;}
}

根因定位

  • 问题和Razor层调用的Enum.GetName方法无关,故障点在API层的视图模型转换逻辑:转换环节没有正确将枚举值传递到UserViewModel,导致两个枚举属性传入值都是默认值0
  • 项目内Nationality、Medium两类枚举的有效值均从1开始定义,不存在值为0的枚举成员
  • .NET 6 中Enum.GetName方法的原生行为为:如果传入的整数值没有对应已定义的枚举成员,方法直接返回null,null值渲染到页面时不会产生任何可见内容,也不会触发运行时异常,最终表现为对应位置空白。

修复方案

  1. 修复上游API层的视图模型映射逻辑,确保枚举属性可以正确映射到合法有效值,从根源杜绝非法0值传入前端
  2. 前端Razor层增加容错兜底逻辑,避免上游传值异常时页面出现无提示的空白,优化后代码参考:
<div>
    <p>Nationality: @(Enum.GetName(typeof(Nationality), user.Nationality) ?? "未知")</p>
    <p>Favourite Medium: @(Enum.GetName(typeof(Medium), user.FavouriteMedium) ?? "未知")</p>
</div>

@code {
    [Parameter]
    public UserViewModel user {get; set;} = new();
}

如果需要做更严格的合法性校验,可以在渲染前通过Enum.IsDefined方法提前判断枚举值是否合法,做对应分支处理。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:27:52