[英]MVC EnumDropDownListFor with Enum Display Description attribute as the value
我有一个带显示描述属性的枚举,
public enum CSSColours
{
[Display(Description = "bg-green")]
Green,
[Display(Description = "bg-blue")]
Blue,
}
现在我想将此枚举绑定到DropDownlist,在下拉项目显示文本和描述中显示枚举值(绿色,蓝色)作为项目值(bg-green,bg-blue)。
当我使用EnumDropDownListFor
帮助方法绑定Dropdown时
@Html.EnumDropDownListFor(c => dm.BgColor)
它将项值设置为枚举值(0,1),并且找不到将值设置为显示描述的方法。
如何将值设置为Enum Display Description属性?
您需要从Enum获取显示名称(DisplayAttribute),在下面的示例中设置Enum Display Description属性的值
行动(绑定下拉列表)
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();
}
Helper方法GetDescriptionOfEnum通过枚举名称获取Description属性
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,
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.