asp.net-mvc-3 - 使用 AttributeDescription 字段的下拉列表枚举 ASP.NET MVC

标签 asp.net-mvc-3

基于这篇文章: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/

相关文章:

asp.net-mvc - ASP.NET MVC - View 模型、域模型和数据模型

asp.net-mvc-3 - MVC 3, Entity Framework 4.x,数据库优先,绝望

c# - 如何使用 ASP.NET MVC 3 和 Stack Overflow 的 Markdown

asp.net-mvc - ASP.NET MVC - 从另一个项目引用主/布局页面?

asp.net-mvc - 当传递给辅助方法时如何获取 <#= Id #> 的值

c# - 使用MVC, Entity Framework 找不到程序集引用

asp.net-mvc - 如何使用Ajax.ActionLink?

c# - 路径 '/' 的 Controller 未找到或未实现 IController

c# - MVC - 从 View 调用 Controller

asp.net - 如何在 .net 3.5 中托管我的 MVC3 应用程序?