Lee D Lee D - 11 months ago 123
C# Question

How to get the values of an enum into a SelectList

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().

Answer Source

To get the value of an enum you need to cast the enum to its underlying type:

Value = ((int)i).ToString();