基于这篇文章:How do you create a dropdownlist from an enum in ASP.NET MVC?
我想做完全相同的事情,除了使用我的枚举中的 AttributeDescription 字段,例如:
[DescriptionAttribute("1 Star")] OneStar = 1,
[DescriptionAttribute("2 Stars")] TwoStar = 2,
[DescriptionAttribute("3 Stars")] ThreeStar = 3,
[DescriptionAttribute("4 Stars")] FourStar = 4
前面链接中给出的解决方案将在下拉列表的文本字段中显示“OneStar”,而我希望看到“1 Star”。我看过一些与此相关的帖子,但他们的解决方案非常冗长。
最佳答案
您可以尝试以下几行:
public static SelectList ToSelectList<TEnum>(this TEnum enumObj)
{
var enumType = typeof(TEnum);
var fields = enumType.GetFields(
BindingFlags.Static | BindingFlags.GetField | BindingFlags.Public
);
var values = Enum.GetValues(enumType).OfType<TEnum>();
var items =
from value in values
from field in fields
let descriptionAttribute = field
.GetCustomAttributes(
typeof(DescriptionAttribute), true
)
.OfType<DescriptionAttribute>()
.FirstOrDefault()
let description = (descriptionAttribute != null)
? descriptionAttribute.Description
: value.ToString()
where value.ToString() == field.Name
select new { Id = value, Name = description };
return new SelectList(items, "Id", "Name", enumObj);
}
关于asp.net-mvc-3 - 使用 AttributeDescription 字段的下拉列表枚举 ASP.NET MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5961148/