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