你必須首先創建枚舉屬性,該屬性將用於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 –