Раскрывающийся список Enum ASP.NET MVC с использованием поля AttributeDescription - PullRequest
2 голосов
/ 11 мая 2011

Основано на этом посте: Как создать раскрывающийся список из перечисления в 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 звезда".Я видел несколько сообщений, касающихся этого, но их решения довольно многословны.

Ответы [ 2 ]

4 голосов
/ 11 мая 2011

Вы можете попробовать что-то между строк:

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);
}
0 голосов
/ 04 декабря 2011

Лучшим решением, которое я нашел для этого, было объединение этого блога с этим ответом . Это делает вид и модель очень удобочитаемыми и удобными в обслуживании.

Смотрите мой полный ответ здесь .

Модель:

public enum YesPartialNoEnum
{
    [Description("Yes definitely")]
    Yes,
    [Description("No way!")]
    No
}

//........

[Display(Name = "The label for my dropdown list")]
public virtual Nullable<YesPartialNoEnum> CuriousQuestion{ get; set; }

//........

Вид:

@Html.ValidationMessageFor(model => model.CuriousQuestion)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...