Lee D Lee D - 1 month ago 17
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

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

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