Comment faire pour récupérer les valeurs de l'enum dans un SelectList

Imaginer que j'ai une énumération comme ceci (juste un exemple):

public enum Direction{
    Horizontal = 0,
    Vertical = 1,
    Diagonal = 2
}

Comment puis-je écrire une routine pour obtenir ces valeurs dans un Système.Web.Mvc.SelectList, étant donné que le contenu de l'énumération sont sujettes à des changements dans l'avenir? Je veux obtenir chaque énumérations nom de l'option de texte, et sa valeur comme la valeur du texte, comme ceci:

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

C'est le mieux que je peux venir avec à ce jour:

 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);
 }

Toutefois, cela rend toujours l'option de texte comme 'Système.Web.Mvc.ListItem'. Débogage à travers ce me montre aussi que le protocole Enum.GetValues() retourne 'Horizontale, à la Verticale", etc. au lieu de 0, 1 comme je l'ai prévu, ce qui me fait me demander quelle est la différence entre les Enum.GetName() et Enum.GetValue().

InformationsquelleAutor Lee D | 2009-07-10