IM Utilisation d'un extrait de code d'une autre question Stackoverflow Question: sur le côté mon Enum code>: p>
public enum Options
{
[Display(Name ="Yes")]
0,
[Display(Name = "No")]
1,
[Display(Name = "Other")]
2,
}
3 Réponses :
Vous avez probablement besoin d'une méthode d'extension pour votre Enum pour obtenir l'attribut d'affichage que vous avez mis sur vos options ENUM. Ensuite, lorsque vous recevez le nom ou la valeur de vos options, valeur Enum dans la méthode Radiobuttonforenum, vous appelez simplement la méthode d'extension pour remplir la valeur. P>
J'ai récemment écrit un article de blog sur ce sujet: http://joerijans.blogspot.com/2011/10/triple-door-extension-method-custom.html P>
J'espère que cela aide. P>
J'utilise [description] code> dans mon code, mais vous pouvez simplement modifier cela pour utiliser
displayAttribute code>: p>
Vous pouvez utiliser la réflexion pour récupérer la valeur:
public static MvcHtmlString RadioButtonForEnum<TModel, TProperty>( this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression ) { var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); var sb = new StringBuilder(); var enumType = metaData.ModelType; foreach (var field in enumType.GetFields(BindingFlags.Static | BindingFlags.GetField | BindingFlags.Public)) { var value = (int)field.GetValue(null); var name = Enum.GetName(enumType, value); var label = name; foreach (DisplayAttribute currAttr in field.GetCustomAttributes(typeof(DisplayAttribute), true)) { label = currAttr.Name; break; } var id = string.Format( "{0}_{1}_{2}", htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix, metaData.PropertyName, name ); var radio = htmlHelper.RadioButtonFor(expression, name, new { id = id }).ToHtmlString(); sb.AppendFormat( "<label for=\"{0}\">{1}</label> {2}", id, HttpUtility.HtmlEncode(label), radio ); } return MvcHtmlString.Create(sb.ToString()); }
Cela fonctionne un régal, malheureusement, je ne reçois plus de valeur ajoutée automatiquement: @ html.radiobuttonforenum (m => m.Options) code>
@Rawrylions, à droite, j'ai mis à jour ma réponse pour résoudre ce problème. Cela devrait fonctionner maintenant comme prévu.
Des trucs fantastiques, merci pour l'aide. Je peux maintenant utiliser cela comme base pour créer enum à d'autres éléments de formulaire aussi :)