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:

    <option value="0">Horizontal</option>
    <option value="1">Vertical</option>
    <option value="2">Diagonal</option>

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

How to get the values of an enum into a SelectList