asp.net-mvc – 如何使用枚举值填充下拉列表?

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 如何使用枚举值填充下拉列表?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个枚举我的视图模型的属性之一.我想显示一个下拉列表,其中包含枚举的所有值.我可以使用以下代码使用它.

我想知道是否有一种简单的方法从枚举转换为IEnumerable?我可以手动执行,如下例所示,但是当我添加新的枚举值时,代码会中断.我想我可以通过这个example的反射来做到这一点,但是还有其他方法可以做到这一点吗?

  1. public enum Currencies
  2. {
  3. CAD,USD,EUR
  4. }
  5.  
  6. public viewmodel
  7. {
  8. [required]
  9. public Currencies SelectedCurrency {get; set;}
  10.  
  11. public SelectList Currencies
  12. {
  13. List<Currencies> c = new List<Currencies>();
  14. c.Add(Currencies.CAD);
  15. c.Add(Currencies.USD);
  16. c.Add(Currencies.EUR);
  17.  
  18. return new SelectList(c);
  19. }
  20. }

解决方法

我正在使用一个助手,我发现 here用一个通用的枚举类型填充我的SelectLists,我做了一些修改添加所选的值,但这是它的样子:
  1. public static SelectList ToSelectList<T>(this T enumeration,string selected)
  2. {
  3. var source = Enum.GetValues(typeof(T));
  4.  
  5. var items = new Dictionary<object,string>();
  6.  
  7. var displayAttributeType = typeof(DisplayAttribute);
  8.  
  9. foreach (var value in source)
  10. {
  11. FieldInfo field = value.GetType().GetField(value.ToString());
  12.  
  13. DisplayAttribute attrs = (DisplayAttribute)field.
  14. GetCustomAttributes(displayAttributeType,false).FirstOrDefault()
  15.  
  16. items.Add(value,attrs != null ? attrs.GetName() : value.ToString());
  17. }
  18.  
  19. return new SelectList(items,"Key","Value",selected);
  20. }

关于它的好处是它将DisplayAttribute读作标题而不是枚举名称. (如果您的枚举包含空格或您需要本地化,那么它会让您的生活更轻松)

因此,您需要将Display attirubete添加到您的枚举中,如下所示:

  1. public enum User_Status
  2. {
  3. [Display(Name = "Waiting Activation")]
  4. Pending,// User Account Is Pending. Can Login / Can't participate
  5.  
  6. [Display(Name = "Activated" )]
  7. Active,// User Account Is Active. Can logon
  8.  
  9. [Display(Name = "Disabled" )]
  10. Disabled,// User Account Is Diabled. Can't Login
  11. }

这就是你在视图中使用它们的方式.

  1. <%: Html.DropDownList("ChangeStatus",ListExtensions.ToSelectList(Model.statusType,user.Status))%>

Model.statusType只是User_Status类型的枚举对象.

就是这样,viewmodel中不再有SelectLists.在我的例子中,我正在我的viewmodel中重新生成一个枚举,但你可以直接在你的视图中引用枚举类型.我只是这样做,让一切都干净漂亮.

希望这很有帮助.

猜你在找的asp.Net相关文章