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. thinkphp5实现文件上传

    原理:通过form表单的enctype = "multipart / form-data"属性将文件临时放在htdocs文件夹的tmp目录下,再通过后台的程序将文件保存在自己设定的 ...

  2. 深入Linux内核架构——简介与概述

    一.内核的任务 纯技术层面上,内核是硬件与软件的之间的一个中间层.作用是将应用程序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址. 从应用程序视角上看,内核可以被认为是一台增强 ...

  3. elementary 5.0 安装 chrome

    sudo apt install google-chrome-stable wget -q -O - https://dl.google.com/linux/linux_signing_key.pub ...

  4. redis:安装配置主从

    1.安装依赖包 yum install gcc gcc-c++ -y 2.下载安装包,解压 cd /usr/local/src/wget http://download.redis.io/releas ...

  5. 微信小程序request请求动态获取数据

    微信小程序开发文档链接 1 后台代码: clickButton:function(){ var that = this; wx.request({ url: 'http://localhost:909 ...

  6. Python_编程题集_003_递归算法解析

    3.递归算法: 3)传入一个Json串,返回一个字典,字典只取出Json最底层的数据, 中间如果有字符串也要进行处理,请以下面的数据为例,请用递归方法实现 Json:{"a":&q ...

  7. tornado框架基础04-模板基础

    01 模板 模板演示 配置路径 在 application 中配置模板文件和静态文件的路径: template_path='templates', static_path='static', 模板 & ...

  8. Linux常用命令大全--有关磁盘空间的命令

    1.mount 命令的功能是挂载文件系统,可以挂载硬盘.光盘.软盘,也可以挂载NFS网络文件系统 mount -t 设备类型 存放目录 mount IP地址:/所提供的目录 存放目录 (无) 不加任何 ...

  9. scrapy_redis使用介绍

    scrapy_redis是一个基于redis的scrapy组件,通过它可以快速实现简单的分布式爬虫程序,该组件主要提供三大功能: (1)dupefilter——URL去重规则(被调度器使用) (2)s ...

  10. Python浅拷贝copy()与深拷贝deepcopy()区别

    其实呢,浅拷贝copy()与深拷贝deepcopy()之间的区分必须要涉及到python对于数据的存储方式. 首先直接上结论: —–我们寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的 ...