1. <span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><pre name="code" class="csharp">
  1. public static class EnumKit
  2. {
  3. #region 根据枚举生成下拉列表数据源
  4. /// <summary>
  5. /// 根据枚举生成下拉列表的数据源
  6. /// </summary>
  7. /// <param name="enumType">枚举类型</param>
  8. /// <param name="firstText">第一行文本(一般用于查询。例如:全部/请选择)</param>
  9. /// <param name="firstValue">第一行值(一般用于查询。例如:全部/请选择的值)</param>
  10. /// <returns></returns>
  11. public static IList<SelectListItem> ToSelectList(Type enumType
  12. , string firstText = "请选择"
  13. , string firstValue = "-1")
  14. {
  15. IList<SelectListItem> listItem = new List<SelectListItem>();
  16. if (enumType.IsEnum)
  17. {
  18. AddFirst(listItem, firstText, firstValue);
  19. Array values = Enum.GetValues(enumType);
  20. if (null != values && values.Length > 0)
  21. {
  22. foreach (int item in values)
  23. {
  24. listItem.Add(new SelectListItem { Value = item.ToString(), Text = Enum.GetName(enumType, item) });
  25. }
  26. }
  27. }
  28. else
  29. {
  30. throw new ArgumentException("请传入正确的枚举!");
  31. }
  32. return listItem;
  33. }
  34. static void AddFirst(IList<SelectListItem> listItem, string firstText, string firstValue)
  35. {
  36. if (!string.IsNullOrWhiteSpace(firstText))
  37. {
  38. if (string.IsNullOrWhiteSpace(firstValue))
  39. firstValue = "-1";
  40. listItem.Add(new SelectListItem { Text = firstText, Value = firstValue });
  41. }
  42. }
  43. /// <summary>
  44. /// 根据枚举的描述生成下拉列表的数据源
  45. /// </summary>
  46. /// <param name="enumType"></param>
  47. /// <returns></returns>
  48. public static IList<SelectListItem> ToSelectListByDesc(
  49. Type enumType
  50. , string firstText = "请选择"
  51. , string firstValue = "-1"
  52. )
  53. {
  54. IList<SelectListItem> listItem = new List<SelectListItem>();
  55. if (enumType.IsEnum)
  56. {
  57. AddFirst(listItem, firstText, firstValue);
  58. string[] names = Enum.GetNames(enumType);
  59. names.ToList().ForEach(item =>
  60. {
  61. string description = string.Empty;
  62. var field = enumType.GetField(item);
  63. object[] arr = field.GetCustomAttributes(typeof(DescriptionAttribute), true); //获取属性字段数组
  64. description = arr != null && arr.Length > 0 ? ((DescriptionAttribute)arr[0]).Description : item;   //属性描述
  65. listItem.Add(new SelectListItem() { Value = ((int)Enum.Parse(enumType, item)).ToString(), Text = description });
  66. });
  67. }
  68. else
  69. {
  70. throw new ArgumentException("请传入正确的枚举!");
  71. }
  72. return listItem;
  73. }
  74. #endregion
  75. #region 获取枚举的描述
  76. /// <summary>
  77. /// 获取枚举的描述信息
  78. /// </summary>
  79. /// <param name="enumValue">枚举值</param>
  80. /// <returns>描述</returns>
  81. public static string GetDescription(this Enum enumValue)
  82. {
  83. string value = enumValue.ToString();
  84. FieldInfo field = enumValue.GetType().GetField(value);
  85. object[] objs = field.GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false);
  86. if (objs == null || objs.Length == 0) return value;
  87. System.ComponentModel.DescriptionAttribute attr = (System.ComponentModel.DescriptionAttribute)objs[0];
  88. return attr.Description;
  89. }
  90. #endregion
  91. }

  1. <span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">
  2. </span>
  1. <span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">调用代码:</span>
  1. public ActionResult Index()
  2. {
  3. IList<SelectListItem> listItem = EnumKit.ToSelectList(typeof(OrderStatus), "全部");
  4. ViewBag.SelectListItem = listItem;
  5. IList<SelectListItem> SelectListItemDesc = EnumKit.ToSelectListByDesc(typeof(OrderStatus));
  6. ViewBag.SelectListItemDesc = SelectListItemDesc;
  7. // 获取描述特性的值
  8. string sendHuo = OrderStatus.发货.GetDescription();
  9. return View();
  10. }

C# MVC 枚举转 SelectListItem的更多相关文章

  1. MVC 枚举 转 SelectListItem

    ViewBag.userlevel = new SelectList(Enum.GetNames(typeof(AdminLevels)),"", "", te ...

  2. C#.NET MVC 枚举转dictionary自动装载生成下拉框

      /// <summary> /// 枚举转SelectListItem /// </summary> public class Enum_Helper { /// < ...

  3. ASP.NET MVC 枚举类型转LIST CONTROL控件

    在实际应用中,我们经常会用到下拉框.多选.单选等类似的控件,我们可以统称他们为List Control,他们可以说都是一种类型的控件,相同之处都是由一个或一组键值对的形式的数据进行绑定渲染而成的. 这 ...

  4. MVC 枚举绑定 DropDownList

    /// <summary> /// 枚举转化下拉列表数据集 /// </summary> /// <param name="type">类型&l ...

  5. asp.net MVC 枚举类型的处理的几种方式

    枚举类型本质上是int类型,整型,这是非常重要的一点. 可以使用(int)将它强制转换为 整形.如果要使用MVC5提供的新辅助方法@Html.EnumDropDownListFor()方法,就必须将枚 ...

  6. .net MVC 中枚举类型Enum 转化成 下拉列表的数据源

    第一次写技术博文,记录下工作中遇到的问题,给自己的知识做个备份,也希望能帮助到其他的同学 最近接手了公司的一个新的项目.有个页面涉及相关设计. 分享一个经常用到的吧. 方法一: 直入主题吧 我们的目的 ...

  7. MVC中下拉框显示枚举项

    原文:MVC中下拉框显示枚举项 本篇将通过3种方式,把枚举项上的自定义属性填充到下拉框: 1.通过控制器返回List<SelectListItem>类型给前台视图 2.通过为枚举类型属性打 ...

  8. 你想要的都在这里,ASP.NET Core MVC四种枚举绑定方式

    前言 本节我们来讲讲在ASP.NET Core MVC又为我们提供了哪些方便,之前我们探讨过在ASP.NET MVC中下拉框绑定方式,这节我们来再来重点看看枚举绑定的方式,充分实现你所能想到的场景,满 ...

  9. ASP.NET Core MVC四种枚举绑定方式

    前言 本节我们来讲讲在ASP.NET Core MVC又为我们提供了哪些方便,之前我们探讨过在ASP.NET MVC中下拉框绑定方式,这节我们来再来重点看看枚举绑定的方式,充分实现你所能想到的场景,满 ...

随机推荐

  1. python-爬虫学习(文字、图片、视频)

    爬虫-文字爬取 import re import requests respone = requests.get('https://ishuo.cn/') ##获取网站url data = respo ...

  2. reversing.kr easykeygen 之wp

    补充: int(x,[base]): 就是将x(通常是一个字符串)按照base进制转换成整数. 比如: ’) ##转换成整数10 ) ##'按16进制转换,将得到整数16 ) ##得到255 int( ...

  3. HDU 6216 A Cubic number and A Cubic Number(数学/二分查找)

    题意: 给定一个素数p(p <= 1e12),问是否存在一对立方差等于p. 分析: 根据平方差公式: 因为p是一个素数, 所以只能拆分成 1*p, 所以 a-b = 1. 然后代入a = b + ...

  4. CSS3 pointer-events:none 让你摆脱事件的烦恼

    以前没遇到这个属性,在一个偶然的博文下发现该属性真的好用,你是否遇到过写鼠标移入显示文本的效果时,鼠标在元素内的每一次移动都会造成要显示文本的闪烁或是突然的消失?只要在被控制的元素中加上这个属性完美解 ...

  5. 创建ArrayList集合对象并添加元素

    ArrayListDemo.java import java.util.ArrayList; /* * 为什么出现集合类: * 我们学习的是面向对象编程语言,而面向对象编程语言对事物的描述都是通过对象 ...

  6. Java学习之并发多线程理解

    1.线程简介: 世间万物会同时完成很多工作,如人体同时进行呼吸.血液循环.思考问题等活动,用户既可以使用计算机听歌也可以使用它打印文件,而这些活动完全可以同时进行,这种思想在Java中称为并发,而将并 ...

  7. python之GUI自定义界面设计 2014-4-10

    #自定义界面设计mybutton = Button(parent, **configuration options)也可以这么写mybutton.configure(**options)颜色可以用rg ...

  8. [luoguP1783] 海滩防御(二分 || 最短路 || 最小生成树)

    传送门 因为答案满足单调性,所以看到这个题,第一反应是二分,但是总是WA,也没有超时. 看了题解,,,,,, 这题刚开始很多人会想到二分,二分答案,然后看看是否能绕过所有信号塔,但是,这样写明显超时, ...

  9. 售货员的难题(codevs 2596)

    题目描述 Description 某乡有n个村庄(1<n<=15),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)是已知的,且A村到B村与B村到A村 ...

  10. BZOJ4580: [Usaco2016 Open]248

    n<=248个数字,可以进行这样的操作:将相邻两个相同的数字合并成这个数字+1,求最大能合成多少. f(i,j)--区间i到j能合成的最大值,f(i,j)=max(f(i,k)+1),f(i,k ...