【问题标题】:Show enum name value for corresponding Id in .NET Core在 .NET Core 中显示对应 Id 的枚举名称值
【发布时间】:2019-06-11 11:26:16
【问题描述】:

我正在开发一个 Web 应用程序和 .NET Core,最近遇到了这个问题。

它在@Html.DisplayFor(model => model.MutatieReden) 中显示枚举值的 ID,但我想显示枚举的名称,因为这是一个“详细信息”视图。

我的枚举是这样构建的,我错过了什么吗?:

//Class property
public Reden? MutatieReden { get; set; }

//Enum
    public enum Reden
    {
        [Display(Name = "Niet van toepassing")] NietVanToepassing = 1,
        [Display(Name = "Administratieve reden")] AdministratieveReden = 2,
        [Display(Name = "Niet akkoord klant")] NietAkkoordKlant = 3,
        [Display(Name = "Incasso blokkade")] IncassoBlokkade = 4,
    }

我尝试了各种解决方案,但大多数都是针对常规 ASP.NET MVC 的,答案都已过时。

编辑:这不是重复的,因为这适用于 ASP.NET Core,而其他解决方案适用于 .NET MVC 5.1。已经尝试过这些解决方案。

【问题讨论】:

  • 向我们展示您尝试过的两种方法。在您的问题中。
  • 这里的“名字”是指"Niet van toepassing"等吗?
  • @MarcGravell 是的,我想显示这些值而不是它给我的 ID
  • @AidsJung,我尝试使用 ASP.NET Core MVC 2.2 重现该问题,但 Display 属性的名称显示良好。 Here 是我的测试演示,您可以检查差异。如果您可以分享可重现的演示,它将帮助我们提供有效的建议。

标签: c# .net class asp.net-core enums


【解决方案1】:

出于显示目的,我认为我们可以使用:

@Html.Display(Model.MutatieReden.GetDisplayName())

或者您甚至可以创建仅用于显示的额外属性:

public string MutatieRedenText { get => this.MutatieReden.GetDisplayName(); }

将此静态方法添加到静态类中,例如 public static class EnumHelper

public static string GetDisplayName(this Enum val)
    {
        return val.GetType()
                  .GetMember(val.ToString())
                  .FirstOrDefault()
                  ?.GetCustomAttribute<DisplayAttribute>(false)
                  ?.Name
                  ?? val.ToString();
    }

PS:我没有用编译器测试过,但它可能有效

【讨论】:

  • 根据this“不要使用这个属性来获取Name属性的值。改用GetName方法。”但是,那个方法会抛出一个如果该属性尚未设置,则异常。
【解决方案2】:

Display 属性根本不需要:

Reden enum_value = Reden.AdministratieveReden;
string enum_name = Enum.GetName(typeof(Reden), enum_value);

【讨论】:

  • 我做了这个,它的速度是enum_value.ToString()的两倍。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-18
  • 2022-11-01
  • 2022-10-03
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
相关资源
最近更新 更多