Enums的DropDownList问题

时间:2017-07-23 19:30:28

标签: c# asp.net asp.net-mvc enums

我目前正在本地化一个开源项目,我遇到了Enums问题。

这是我的Enums.cs(不是整个文件,只是问题出现的部分)。

var menu = document.querySelector('.menu')

var sounds = {
  hover: {
    ogg: 'https://instaud.io/17my/download',
    mp3: 'https://instaud.io/17mz/download'
  },
  click: {
    ogg: 'https://instaud.io/17mA/download',
    mp3: 'https://instaud.io/17mB/download'
  }
}

var canPlay = (new Audio()).canPlayType('audio/mpeg') ? 'mp3' : 'ogg'
var type = canPlay === 'mp3' ? 'audio/mpeg' : 'audio/ogg'

for (var k in sounds) {
  var item = sounds[k]
  var audio = new Audio()
  audio.type = type
  audio.src = item[canPlay]
  item.audio = audio
}

menu.addEventListener('mouseover', function(event) {
  var target = event.target
  if (target.nodeName === 'LI') {
    sounds.hover.audio.play()
  }
})

menu.addEventListener('click', function(event) {
  var target = event.target
  if (target.nodeName === 'LI') {
    sounds.click.audio.play()
  }
})

这是我的视图(再次,不是整个文件,只包含我要修复的代码)

 public enum ModeratorLevel
    {
        [Display(Name = "Sahip")]
        Owner = 1,
        [Display(Name = "Moderatör")]
        Moderator = 2,
        [Display(Name = "Temizlikçi")]
        Janitor = 3,
        [Display(Name = "Boyacı")]
        Designer = 4,
        [Display(Name = "Paylaşımcı")]
        Submitter = 99
    }

这是输出; dropdownlist

现在,我想要什么? 我想显示DisplayNames而不是Enum值。 外出看起来像:

  • foo =所有者
  • 主持人
  • 看门人
  • 设计
  • 发布者

但我想表现出来:

  • foo = Sahip
  • 主持人
  • Temizlikçi
  • Boyacı
  • Paylaşımcı

但是在这种变化中,变化必须只是视觉上的。我们不应该更改任何影响Enum函数的代码。我只想显示DisplayNames而不是Enum值。

感谢。

2 个答案:

答案 0 :(得分:1)

您可以添加扩展方法:

public static string DisplayName(this Enum value)
    {
        Type enumType = value.GetType();
        var enumValue = Enum.GetName(enumType, value);
        MemberInfo member = enumType.GetMember(enumValue)[0];

        var attrs = member.GetCustomAttributes(typeof(DisplayAttribute), false);
        var outString = ((DisplayAttribute)attrs[0]).Name;

        if (((DisplayAttribute)attrs[0]).ResourceType != null)
        {
            outString = ((DisplayAttribute)attrs[0]).GetName();
        }

        return outString;
    }

然后在视图中使用它:

@Html.DropDownListFor(model => model.Power, levelsAvailable.Select(x => new SelectListItem() { Text = x.DisplayName(), Value = ((int)x).ToString() }), new { @class = "form-control"} )

答案 1 :(得分:0)

使用EnumDropDownListFor帮助

@Html.EnumDropDownListFor(model => model.Power)