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().
- C'est un gros double de stackoverflow.com/questions/1102022/... et beaucoup d'autres.
Vous devez vous connecter pour publier un commentaire.
Pour obtenir la valeur de l'enum vous avez besoin de jeter l'enum à son type sous-jacent:
Il a été un certain temps depuis que j'ai eu à faire cela, mais je pense que cela devrait fonctionner.
ID = d
àID = (int)d
. Merci pour cette annonce, je n'aurais jamais pensé à ça!Il est une nouvelle fonctionnalité dans ASP.NET MVC 5.1 pour cela.
http://www.asp.net/mvc/overview/releases/mvc51-release-notes#Enum
taghelper
version de cette?<select asp-items="Html.GetEnumSelectList<Direction>()"></select>
.C'est ce que je viens de faire et je pense personnellement sa sexy:
Je vais faire de la traduction des trucs finalement si la Valeur = enu.ToString() va faire un appel à quelque chose quelque part.
T
. En tant que tel, vous ne pouvez pas lancer deint
comme ça.Je voulais faire quelque chose de très similaire à Dann la solution, mais j'avais besoin de la Valeur d'un int et le texte à la représentation de chaîne de l'Enum. C'est ce que je suis venu avec:
Dans ASP.NET Core, MVC, cela se fait avec tag aides.
Ou:
peut-être pas une réponse exacte à la question, mais dans CRUD scénarios d'habitude je met en œuvre quelque chose comme ceci:
PopulateViewdata4Selectlists
est appelée avant que la Vue("Création") et la Vue("Edit"), alors, et dans la Vue:et c'est tout..
J'ai plus de classes et de méthodes pour des raisons diverses:
Enum pour la collecte d'éléments
La création de selectlist dans le Contrôleur
Mavue.cshtml
J'ai eu beaucoup de enum Selectlists et, après beaucoup de la chasse et de criblage, de la trouve que de faire un générique helper fonctionne le mieux pour moi. Il renvoie l'index ou le descripteur comme le Selectlist valeur, et la Description de la Selectlist texte:
Enum:
Helper:
Utilisation:
Régler le paramètre "true" pour les indices de valeur: