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

原创 2016年05月14日 23:16:16

     本人软件开发有四年多了,经历还是蛮丰富的,从开始的wince到现在的C#.NET,JAVA,从嵌入式开发到B/S开发,微信开发,H5APP开发,这么多年接触了很多,但是没在博客上具体分享。本人不喜欢机械式的开发,最喜欢做的是搭建框架和通用类,来使开发变得更简单。从今天开始,我把我觉得在开发中有用的知识陆续分享出来(包括JAVA,C#.NET,js相关),希望对大家有所帮助,代码有哪里不对或者有更好的建议的方式也请大家批评指出,共同分享共同进去。

好了,废话不说了,今天先来个简单的,C#MVC开发中经常会遇到生成下拉框的情况,往往下拉框的内容会跟枚举进行关联,此代码是读取枚举字段的描述内容作为下拉框text值,枚举的value作为下拉框的value值自动生成下拉框,代码如下。

枚举读取类:

    public class EnumHelper
    {
        /// <summary>
        /// 枚举转字典集合
        /// </summary>
        /// <typeparam name="T">枚举类名称</typeparam>
        /// <param name="keyDefault">默认key值</param>
        /// <param name="valueDefault">默认value值</param>
        /// <returns>返回生成的字典集合</returns>
        public static Dictionary<string, object> EnumListDic<T>(string keyDefault, string valueDefault = "")
        {
            Dictionary<string, object> dicEnum = new Dictionary<string, object>();
            Type enumType = typeof(T);
            if (!enumType.IsEnum)
            {
                return dicEnum;
            }
            if (!string.IsNullOrEmpty(keyDefault)) //判断是否添加默认选项
            {
                dicEnum.Add(keyDefault, valueDefault); 
            }
            string[] fieldstrs = Enum.GetNames(enumType); //获取枚举字段数组
            foreach (var item in fieldstrs)  
            {
                string description = string.Empty;
                var field = enumType.GetField(item);
                object[] arr = field.GetCustomAttributes(typeof(DescriptionAttribute), true); //获取属性字段数组
                if (arr != null && arr.Length > 0)
                {
                    description = ((DescriptionAttribute)arr[0]).Description;   //属性描述
                }
                else
                {
                    description = item;  //描述不存在取字段名称
                }
                dicEnum.Add(description, (int)Enum.Parse(enumType, item));  //不用枚举的value值作为字典key值的原因从枚举例子能看出来,其实这边应该判断他的值不存在,默认取字段名称
            }
            return dicEnum;
        }
    }


枚举例子:

        public enum TestEmun
        {
            [Description("这是AAA")]
            AAA = 1,
            [Description("这是BBB")]
            BBB = 2,
            DDA,
            [Description("这是CCC")]
            CCC = 3,
            DDD
        }


页面控制器调用方式:

       public ActionResult Index()
        {
           Dictionary<string,object> dropDic=EnumHelper.EnumListDic<TestEmun>("","");
           //Dictionary<string, object> dropDic = EnumHelper.EnumListDic<TestEmun>("默认", "44");
           //C#MVC的方便之处也在这里,List 集合要与下拉框进行绑定可以直接绑定 ViewBag.dropList = new SelectList(list,"对象字段1","对象字段2","默认选择");
            ViewBag.dropList = new SelectList(dropDic,"value","key");
            return View();
        }


页面视图调用方式:

@Html.DropDownList("dropList", null, new { })      //dropList与 ViewBag.dropList对应自动装载


生成效果:












版权声明:本文为博主原创文章,未经博主允许不得转载。

.net将枚举转成List

using System; using System.Collections.Generic; using System.ComponentModel; namespace zifar.SgmhWeb...
  • yw1688
  • yw1688
  • 2016年02月26日 17:00
  • 3136

枚举值当数据字典使用

public interface EnumType { enum E_TRANCALL { AFTER_SUBTRAN_PROCESS("AFTER_SUBTRAN_PROCESS", "aft...
  • arsenic
  • arsenic
  • 2016年08月01日 22:03
  • 2211

利用枚举展示下拉列表

有时候我们想展示展示一个下拉列表,但又不想从数据库调用。这时我们可以通过枚举值来实现。 EnumHelper.cs using System; using System.Co...
  • shuai7boy
  • shuai7boy
  • 2017年05月25日 15:05
  • 657

C# 枚举绑定到ComboBox

方法一: 绑定 enum TestEnum {zero=0,one=1,two=2} ComboBox cbo = new ComboBox(); cbo.DataSour...
  • Crazy_Frog
  • Crazy_Frog
  • 2012年06月30日 19:30
  • 9593

使用NPOI操作Excel时,给一列所有的单元格加上下拉框的输入限制

public static HSSFDataValidation CreateListConstaint(this HSSFWorkbook book, Int32 columnIndex, IEnu...
  • bclz_vs
  • bclz_vs
  • 2012年03月27日 16:12
  • 5366

【C#MVC工具】C#MVC中使用Dictionary

今天封装了一个工具类,具体作用是将Request传递过来的参数放到Dictionary中,可以对参数进行优化,也可以减少大量的重复代码。 从java转到C#的我,最初最难受的就是从页面传值到控...
  • f627422467
  • f627422467
  • 2016年10月17日 16:19
  • 888

C#实现获取枚举的描述

一个通用获取枚举的描述的方法 /// /// 获取枚举的描述 /// /// 枚举 /// 返回枚举的描述 pub...
  • wangzl1163
  • wangzl1163
  • 2017年05月05日 17:20
  • 3055

C# 获取枚举的 键名称,值 和描述 遍历枚举

C# Enum  枚举的操作。  键名称,值 和描述  和 遍历枚举  ///      /// 促销      ///      public enum cxsd      {   ...
  • wangzhiqiang123456
  • wangzhiqiang123456
  • 2015年05月07日 17:16
  • 8688

C# 枚举的使用

原文地址:http://www.cnblogs.com/kissdodog/archive/2013/01/16/2863515.html 一、在学习枚举之前,首先来听听枚举的优点。   1、枚举...
  • tieshuxianrezhang
  • tieshuxianrezhang
  • 2016年07月19日 22:27
  • 1361

C# 枚举在项目中使用心得

阅读目录 基本介绍使用注意使用方法扩展用法     本文主要是我在项目中对C#枚举的使用心得,如有不足的地方欢迎您指出。 一、基本介绍 ...
  • jiangfei009003
  • jiangfei009003
  • 2016年09月14日 15:25
  • 3879
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#.NET MVC 枚举转dictionary自动装载生成下拉框
举报原因:
原因补充:

(最多只允许输入30个字)