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 ?

1voto

Mostafa Points 1099

Pourquoi ne pas utiliser comme ceci pour pouvoir passer chaque listeControle :

public static void BindToEnum(Type enumType, ListControl lc)
        {
            // get the names from the enumeration
            string[] names = Enum.GetNames(enumType);
            // get the values from the enumeration
            Array values = Enum.GetValues(enumType);
            // turn it into a hash table
            Hashtable ht = new Hashtable();
            for (int i = 0; i < names.Length; i++)
                // note the cast to integer here is important
                // otherwise we'll just get the enum string back again
                ht.Add(names[i], (int)values.GetValue(i));
            // return the dictionary to be bound to
            lc.DataSource = ht;
            lc.DataTextField = "Key";
            lc.DataValueField = "Value";
            lc.DataBind();
        }

Et l'utilisation est aussi simple que :

BindToEnum(typeof(NewsType), DropDownList1);
BindToEnum(typeof(NewsType), CheckBoxList1);
BindToEnum(typeof(NewsType), RadoBuuttonList1);

1voto

bradlis7 Points 553

ASP.NET a depuis été mis à jour avec quelques fonctionnalités supplémentaires, et vous pouvez maintenant utiliser l'enum intégré pour la liste déroulante.

Si vous voulez lier l'Enum lui-même, utilisez ceci :

@Html.DropDownList("response", EnumHelper.GetSelectList(typeof(Response)))

Si vous êtes lié à une instance de Response, utilisez ceci :

// Assuming Model.Response is an instance of Response
@Html.EnumDropDownListFor(m => m.Response)

1voto

combatc2 Points 734

Dans ASP.NET Core, vous pouvez utiliser l'aide Html suivante (issue de Microsoft.AspNetCore.Mvc.Rendering) :

<select asp-items="Html.GetEnumSelectList<GridReportingStatusFilters>()">
     <option value=""></option>
</select>

0voto

Diego Mendes Points 136

Voici ma solution pour Commander une Enum et DataBind (Texte et Valeur) à Dropdown en utilisant LINQ.

var mylist = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().ToList<MyEnum>().OrderBy(l => l.ToString());
foreach (MyEnum item in mylist)
    ddlDivisao.Items.Add(new ListItem(item.ToString(), ((int)item).ToString()));

0voto

justin Points 1

Tutoriel asp.net et winforms avec combobox et dropdownlist : Comment utiliser Enum avec Combobox en C# WinForms et Asp.Net

L'espoir aide

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