138 votes

Comment lier une Enum à un contrôle DropDownList en ASP.NET ?

Disons que j'ai l'énumération simple suivante :

enum Response
{
    Yes = 1,
    No = 2,
    Maybe = 3
}

Comment puis-je lier cet enum à un contrôle DropDownList afin que les descriptions soient affichées dans la liste et que la valeur numérique associée (1, 2, 3) soit récupérée une fois qu'une option a été sélectionnée ?

4voto

sankalp gurha Points 21
public enum Color
{
    RED,
    GREEN,
    BLUE
}

ddColor.DataSource = Enum.GetNames(typeof(Color));
ddColor.DataBind();

3voto

Muhammed Qasim Points 31

Code générique utilisant la réponse six.

public static void BindControlToEnum(DataBoundControl ControlToBind, Type type)
{
    //ListControl

    if (type == null)
        throw new ArgumentNullException("type");
    else if (ControlToBind==null )
        throw new ArgumentNullException("ControlToBind");
    if (!type.IsEnum)
        throw new ArgumentException("Only enumeration type is expected.");

    Dictionary<int, string> pairs = new Dictionary<int, string>();

    foreach (int i in Enum.GetValues(type))
    {
        pairs.Add(i, Enum.GetName(type, i));
    }
    ControlToBind.DataSource = pairs;
    ListControl lstControl = ControlToBind as ListControl;
    if (lstControl != null)
    {
        lstControl.DataTextField = "Value";
        lstControl.DataValueField = "Key";
    }
    ControlToBind.DataBind();

}

3voto

Ben Hughes Points 1104

Après avoir trouvé cette réponse, j'ai trouvé ce que je pense être une meilleure façon de faire (du moins plus élégante), et j'ai pensé revenir et la partager ici.

Page_Load :

DropDownList1.DataSource = Enum.GetValues(typeof(Response));
DropDownList1.DataBind();

LoadValues :

Response rIn = Response.Maybe;
DropDownList1.Text = rIn.ToString();

SaveValues :

Response rOut = (Response) Enum.Parse(typeof(Response), DropDownList1.Text);

2voto

Marie McDonley Points 201

C'est probablement une vieille question mais voici comment j'ai fait la mienne.

Modèle :

public class YourEntity
{
   public int ID { get; set; }
   public string Name{ get; set; }
   public string Description { get; set; }
   public OptionType Types { get; set; }
}

public enum OptionType
{
    Unknown,
    Option1, 
    Option2,
    Option3
}

Puis dans la vue : voici comment utiliser le remplissage de la liste déroulante.

@Html.EnumDropDownListFor(model => model.Types, htmlAttributes: new { @class = "form-control" })

Cela devrait remplir tous les éléments de votre liste d'enum. J'espère que cela vous aidera

0 votes

Cela fonctionne cependant, vous avez besoin d'une classe d'extension si vous voulez incorporer des chaînes de caractères avec des espaces.

1 votes

C'est la meilleure réponse. @Nikul, vous n'avez pas besoin d'une classe d'extension. Vous devez seulement utiliser les annotations. [Display(Name = "Option number one")] Option1,

1voto

roman m Points 9998

Ce n'est pas tout à fait ce que vous cherchez, mais ça pourrait vous aider :

http://blog.jeffhandley.com/archive/2008/01/27/enum-list-dropdown-control.aspx

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