In MVC v5.1, use Html.EnumDropDownListFor
@Html.EnumDropDownListFor( x => x.YourEnumField, "Select My Type", new { @class = "form-control" })
Also in this version the Display attribute is supported: you can add [Display(Name = "Sample")] attributes to each enumeration value and the same code will list your messages in the drop-down list.
For MVC v5 use EnumHelper
@Html.DropDownList("MyType", EnumHelper.GetSelectList(typeof(MyType)) , "Select My Type", new { @class = "form-control" })
For MVC 5 and below
Use the following extention:
namespace MyApp.Common { public static class MyExtensions{ public static SelectList ToSelectList<TEnum>(this TEnum enumObj) where TEnum : struct, IComparable, IFormattable, IConvertible { var values = from TEnum e in Enum.GetValues(typeof(TEnum)) select new { Id = e, Name = e.ToString() }; return new SelectList(values, "Id", "Name", enumObj); } } }
This will allow you to write like this:
ViewData["taskStatus"] = task.Status.ToSelectList();