我目前正在本地化一个开源项目,我遇到了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值。 外出看起来像:但我想表现出来:
但是在这种变化中,变化必须只是视觉上的。我们不应该更改任何影响Enum函数的代码。我只想显示DisplayNames而不是Enum值。
感谢。
答案 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)