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


生成效果:












  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值