【问题标题】:MVC EnumDropDownListFor with Enum Display Description attribute as the value以枚举显示描述属性为值的 MVC EnumDropDownListFor
【发布时间】:2015-10-09 02:56:04
【问题描述】:

我有一个带有显示描述属性的枚举,

public enum CSSColours
    {
        [Display(Description = "bg-green")]
        Green,

        [Display(Description = "bg-blue")]
        Blue,
    }

现在我想将这个 Enum 绑定到一个 DropDownlist,在下拉项显示文本中显示 Enum 值(Green,Blue),并将 Description 显示为项值(bg-green,bg-blue)。

当我使用EnumDropDownListFor 辅助方法绑定下拉菜单时

@Html.EnumDropDownListFor(c => dm.BgColor)

它将项目值设置为枚举值 (0, 1),但找不到将值设置为显示描述的方法。

如何将值设置为枚举显示描述属性?

【问题讨论】:

标签: c# asp.net-mvc razor enums


【解决方案1】:

你需要从 Enum 中获取显示名称(DisplayAttribute), 检查下面的示例以设置枚举显示描述属性的值

动作(绑定下拉列表)

public ActionResult Index()
        {   
            var enumDataColours = from CSSColours e in Enum.GetValues(typeof(CSSColours))
                           select new
                           {
                               ID = StaticHelper.GetDescriptionOfEnum((CSSColours)e),
                               Name = e.ToString()
                           };
            ViewBag.EnumColoursList = new SelectList(enumDataColours, "ID", "Name");
            return View();
        }

帮助方法 GetDescriptionOfEnum 通过枚举名称获取描述属性

public static class StaticHelper
    {
        public static string GetDescriptionOfEnum(Enum value)
        {
            var type = value.GetType();
            if (!type.IsEnum) throw new ArgumentException(String.Format("Type '{0}' is not Enum", type));

            var members = type.GetMember(value.ToString());
            if (members.Length == 0) throw new ArgumentException(String.Format("Member '{0}' not found in type '{1}'", value, type.Name));

            var member = members[0];
            var attributes = member.GetCustomAttributes(typeof(System.ComponentModel.DataAnnotations.DisplayAttribute), false);
            if (attributes.Length == 0) throw new ArgumentException(String.Format("'{0}.{1}' doesn't have DisplayAttribute", type.Name, value));

            var attribute = (System.ComponentModel.DataAnnotations.DisplayAttribute)attributes[0];
            return attribute.Description;
        }
    }

剃刀视图

@Html.DropDownList("EnumDropDownColours", ViewBag.EnumColoursList as SelectList)

枚举

public enum CSSColours
    {
        [Display(Description = "bg-green")]
        Green,

        [Display(Description = "bg-blue")]
        Blue,
    }

【讨论】:

  • 我在这个答案中唯一要改变的是将 DropDownList 更改为 DropDownListFor ,如下所示:'@Html.DropDownListFor(m => m.CSSColour, ViewBag.CSSColours as SelectList, "Select One ")'
猜你喜欢
  • 2018-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-05
相关资源
最近更新 更多