你必须首先创建枚举属性,该属性将用于Enum字段来设置显示名称,这将是用户友好的:
public class EnumDisplayNameAttribute : Attribute
{
private string _displayName;
public string DisplayName
{
get { return _displayName; }
set { _displayName = value; }
}
}
,然后你必须来装饰属性您枚举领域是这样的:
public enum EventType
{
[EnumDisplayName(DisplayName="Some User Friendly Name")]
Other = 0,
[EnumDisplayName(DisplayName="Some User Friendly Name")]
Birth = 1,
[EnumDisplayName(DisplayName="Some User Friendly Name")]
Marriage = 2,
[EnumDisplayName(DisplayName="Some User Friendly Name")]
Death = 3,
[EnumDisplayName(DisplayName="Some User Friendly Name")]
Brittish_Airways=4
}
现在对于枚举添加下面的扩展方法来现有的扩展方法的类或创建一个新的名为EnumExtensions:
public static class ExtensionMethods
{
public static System.Web.Mvc.SelectList ToSelectList<TEnum>(this TEnum obj)
where TEnum : struct, IComparable, IFormattable, IConvertible // correct one
{
return new SelectList(Enum.GetValues(typeof(TEnum)).OfType<Enum>()
.Select(x =>
new SelectListItem
{
Text = x.DisplayName(),
Value = (Convert.ToInt32(x)).ToString()
}), "Value", "Text");
}
public static string DisplayName(this Enum value)
{
FieldInfo field = value.GetType().GetField(value.ToString());
EnumDisplayNameAttribute attribute
= Attribute.GetCustomAttribute(field, typeof(EnumDisplayNameAttribute))
as EnumDisplayNameAttribute;
return attribute == null ? value.ToString() : attribute.DisplayName;
}
}
现在,在您的视图中使用的扩展方法与用户友好的名称返回枚举领域的SelectList作为选项的文本:
@using YourNamespace.ExtensionMethods;
@Html.DropDownListFor(model => model.EventTypeText,
EventType.Other.ToSelectList()),
new { @class = "ddlEventType ddl" })
,你也可以检查my article (Binding Enum with DropdownList in asp.net mvc)
检查我的文章,我在我的情况下所做的:HTTP://developmentpassion.blogspot.com/2015/03/binding-enum-with-dropdownlist-in.html –