69 votes

Comment convertir une énumération en une List<SelectListItem> ?

J'ai une page web asp.net-mvc et je veux afficher une liste déroulante qui est basée sur une énumération. Je veux afficher le texte de chaque élément de l'énumération et l'id étant la valeur int à laquelle l'énumération est associée. Existe-t-il un moyen élégant de réaliser cette conversion ?

137voto

SLaks Points 391154

Vous pouvez utiliser LINQ :

Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Select(v => new SelectListItem {
    Text = v.ToString(),
    Value = ((int)v).ToString()
});

4voto

Ray Points 12711

Vous pouvez utiliser Enum.GetNames() pour obtenir un tableau de chaînes contenant les noms des éléments de l'enum. Si vos noms d'éléments sont conviviaux, c'est probablement suffisant. Sinon, vous pouvez créer votre propre GetName() qui renverrait un nom sympa pour chaque élément.

OU - si l'énumération ne change jamais (ou rarement), vous pouvez simplement créer une méthode qui ajoute directement les éléments codés en dur à votre liste déroulante. Cette méthode est probablement plus efficace (si c'est important pour vous).

3voto

ChaosPandion Points 37025

Maintenant, j'ai utilisé Tuple<string, string> mais vous pouvez le convertir pour utiliser n'importe quoi :

var values = Enum.GetValues(typeof(DayOfWeek))
    .Cast<DayOfWeek>()
    .Select(d => Tuple.Create(((int)d).ToString(), d.ToString()))
    .ToList()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X