How to get the values of an enum into a SelectList
asp.net-mvc, c#, enums
Solution
To get the value of an enum you need to cast the enum to its underlying type:
Value = ((int)i).ToString();
Problem
Imagine I have an enumeration such as this (just as an example): ``` public enum Direction{ Horizontal = 0, Vertical = 1, Diagonal = 2 } ``` How can I write a routine to get these values into a System.Web.Mvc.SelectList, given that the contents of the enumeration are subject to change in future? I want to get each enumerations name as the option text, and its value as the value text, like this: ``` <select> <option value="0">Horizontal</option> <option value="1">Vertical</option> <option value="2">Diagonal</option> </select> ``` This is the best I can come up with so far: ``` public static SelectList GetDirectionSelectList() { Array values = Enum.GetValues(typeof(Direction)); List<ListItem> items = new List<ListItem>(values.Length); foreach (var i in values) { items.Add(new ListItem { Text = Enum.GetName(typeof(Direction), i), Value = i.ToString() }); } return new SelectList(items); } ``` However this always renders the option text as 'System.Web.Mvc.ListItem'. Debugging through this also shows me that Enum.GetValues() is returning 'Horizontal, Vertical' etc. instead of 0, 1 as I would've expected, which makes me wonder what the difference is between Enum.GetName() and Enum.GetValue().