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对应自动装载


生成效果:












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

ACE框架整合记录2Tab插件-【完结】

$(function () { //添加                 $("#main-tab").aceaddtab({ title: "页面a", url: "a.aspx" });  ...

将枚举值转换为DropDownList等的选项值

应用场景:在项目中,我们已习惯将较稳定的分类标准定义为枚举,来保证程序中取值的合法性,也使代码更清晰。某些情况下我们需要在DropDownList等选择控件上绑定某个枚举的所有枚举值,供用户自行选择,...

ASP.NET MVC 下拉框的传值的两种方式

以前使用WebForm变成时,下拉框传值只需直接在后台绑定代码就可以了。现在我们来看看在MVC中DropDownList...
  • zjx86320
  • zjx86320
  • 2015年01月09日 14:59
  • 35734

ASP.NET MVC + Jquery 实现Ajax下拉框数据三级联动

这是第一使用Jquery实现城市三级数据联动的实例!之前本人没有使用过Jquery,在WebForm的开发过程中,很多时候用的是ASP.NET Ajax,ajaxPro +JavaScript,从未使...
  • lchwhy
  • lchwhy
  • 2012年04月08日 20:04
  • 1018

ASP.NET MVC 下拉框的传值的两种方式

以前使用WebForm变成时,下拉框传值只需直接在后台绑定代码就可以了。现在我们来看看在MVC中DropDownList是如果和接受从Controller传过来的值的。          ...

.net mvc DropDownList 下拉框_无限级分类

1、数据库设计: id:int  name:string pid:int  //父级id(顶级菜单默认为0) 2、Controller: using System; using System.Coll...

编程思路——c#.net mvc 项目经验:三级联动框

项目要求: 单击

ASP.NET(C#)中的自动下拉框的实现

[1].[代码] [C#]代码 跳至 [1] [2] [3] [4] ? 1 2 3 4 5 6 7 8 9 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#.NET MVC 枚举转dictionary自动装载生成下拉框
举报原因:
原因补充:

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