关于c#:使用StringValue渲染枚举属性

using StringValue for rendering enum properties

本问题已经有最佳答案,请猛点这里访问。

在Razor视图中,我正在呈现具有如下枚举值的组合框

1
2
3
4
5
6
7
8
9
10
11
@Html.DropDownListFor(m => m.CarType, new SelectList(Enum.GetValues(typeof(CarTypeEnum))),
     "Select value", new { @class ="form-control" })

public enum CarTypeEnum
{
  [StringValue("Car type one")]
   CarTypeOne = 1,

  [StringValue("Car type two")]
   CarTypeTwo = 2,
}

如何使用DropDownList帮助器在组合框中呈现StringValue用Car type one代替CarTypeOne


您可以使用C_中提供的显示属性。应该是这样的:

1
2
3
4
5
6
7
public enum CarTypeEnum
{
[Display(Name="Car type one")]
CarTypeOne = 1,
[Display(Name="Car type two")]
CarTypeTwo
}

您还必须只为第一个枚举提供一个值。其余部分将自动生成。

我还有一个枚举扩展,用于将显示属性ALS TEXT中提供的文本放入DropDownList中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static class EnumExtensions
    {/// <summary>
     ///     A generic extension method that aids in reflecting
     ///     and retrieving any attribute that is applied to an `Enum`.
     /// </summary>
        public static TAttribute GetAttribute<TAttribute>(this Enum enumValue)
                where TAttribute : Attribute
        {
            return enumValue.GetType()
                            .GetMember(enumValue.ToString())
                            .First()
                            .GetCustomAttribute<TAttribute>();
        }
    }

用法如下:

1
2
3
4
new SelectListItem
            {
                Text = CarTypeEnum.CarTypeOne.GetAttribute<DisplayAttribute>().Name
            }