yongchao71

分享 交流 纯干货

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

     本人软件开发有四年多了,经历还是蛮丰富的,从开始的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对应自动装载


生成效果:












阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shuizhaoshui/article/details/51412762
个人分类: C#
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭