Enum DropdownList. , , :
Views/Shared/EditorTemplates EnumDropdown.cshtml
@model Enum
@{
var sort = (bool?)ViewData["sort"] ?? false;
var enumValues = new List<object>();
foreach (var val in Enum.GetValues(Model.GetType()))
{
enumValues.Add(val);
}
}
@Html.DropDownListFor(m => m,
enumValues
.Select(m =>
{
string enumVal = Enum.GetName(Model.GetType(), m);
var display = m.GetDescription() ?? enumVal;
return new SelectListItem()
{
Selected = (Model.ToString() == enumVal),
Text = display,
Value = enumVal
};
})
.OrderBy(x => sort ? x.Text : null)
,new { @class = "form-control" })
GetDescription():
public static string GetDescription(this object enumerationValue)
{
Type type = enumerationValue.GetType();
if (!type.IsEnum)
throw new ArgumentException("EnumerationValue must be of Enum type", "enumerationValue");
MemberInfo[] memberInfo = type.GetMember(enumerationValue.ToString());
if (memberInfo != null && memberInfo.Length > 0)
{
object[] attrs = memberInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attrs != null && attrs.Length > 0)
{
return ((DescriptionAttribute)attrs[0]).Description;
}
}
return enumerationValue.ToString();
}
. :
public enum MyEnum
{
[Description("The First Option1")]
Option1,
Option2
}
public class MyModel
{
[UIHint("EnumDropdown")]
public MyEnum TheEnum { get; set; }
}
@model MyModel
@Html.EditorFor(x => x.TheEnum)
" " "2"