Сначала вам нужно создать расширение HTML Helper, например:
public static class HtmlHelperExtensions
{
private static string GetDisplayName(this Enum enumeration)
{
var enumType = enumeration.GetType();
var enumName = Enum.GetName(enumType, enumeration);
var member = enumType.GetMember(enumName)[0];
var attributes = member.GetCustomAttributes(typeof(DisplayAttribute), false);
var attribute = (DisplayAttribute)attributes[0];
var displayName = attribute.Name;
if (attribute.ResourceType != null)
{
displayName = attribute.GetName();
}
return displayName;
}
public static MvcHtmlString EnumDropDownFor<TModel, TEnum>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TEnum>> expression, Func<TEnum, bool> predicate=null, string optionLabel=null, object htmlAttributes=null) where TEnum : struct, IConvertible
{
var enumList = predicate == null ? Enum.GetValues(typeof(TEnum))
.Cast<TEnum>()
: Enum.GetValues(typeof(TEnum))
.Cast<TEnum>()
.Where(e => predicate(e));
var selectList = enumList
.Select(e => new SelectListItem
{
Value = Convert.ToUInt64(e).ToString(),
Text = ((Enum)(object)e).GetDisplayName(),
}).ToList();
if (!string.IsNullOrEmpty(optionLabel))
{
selectList.Insert(0, new SelectListItem
{
Text = optionLabel
});
}
return htmlAttributes==null
? htmlHelper.DropDownListFor(expression, selectList)
: htmlHelper.DropDownListFor(expression, selectList, htmlAttributes);
}
}
Затем, если ваш Enum
как ниже
public enum EventType
{
[Display(Description = "Downtime")]
Downtime = 0,
[Display(Description = "Speed")]
Speed = 1,
[Display(Description = "Quality")]
Quality = 2
[Display(Description = "Test")]
Test = 3
}
, и вы не хотите загружатьTest
затем используйте:
@Html.EnumDropDownFor(model => model.Type, types => types != EventType.Test, "Event Type", new {@class = "form-control"})
Или, если вам нужно загрузить все, то:
@Html.EnumDropDownFor(model => model.Type, optionLabel:"Event Type", htmlAttributes:new {@class = "form-control"})