反射+枚举实现Select下拉菜单
来源:互联网 发布:c语言中字符串数组 编辑:程序博客网 时间:2024/05/01 12:55
1.首先创建一个Display特性,代码如下:
/// <summary> /// 定义Display特性 /// </summary> public class DisplayAttribute:System.Attribute { public DisplayAttribute() { } /// <summary> /// 展示名称 /// </summary> public string Name { get; set; } }
2.定义一个枚举类型
public enum EnterpriseType : int { [Display(Name = "国有经济")] stateOwned = 1, [Display(Name = "集体经济")] collective = 2, [Display(Name = "私营经济")] privateOwned = 3, [Display(Name = "个体经济")] individual = 4 }
3.根据反射创建枚举的扩展方法,展示出Display的名称
public static class DisplayEnumExtension { /// <summary> /// 反射获取枚举项的名称(对枚举的扩展) /// </summary> /// <param name="enumVal">枚举值</param> /// <returns></returns> public static string GetDisplayName(this Enum enumVal) { //Display显示名称 string showName = ""; //获取枚举值的Type var type = enumVal.GetType(); //枚举值的字符串表示 string enumStr = enumVal.ToString(); //根据字符串获取对应的枚举成员 var memberInfo= type.GetMember(enumStr); if (memberInfo == null || memberInfo.Count() == 0) { //如果成员不存在,则显示英文字符串 showName = enumStr; } else { //获取成员的DisplayAttribute的特性,如果为空则显示英文字符串 var attrbutes=memberInfo[0].GetCustomAttributes(typeof(DisplayAttribute),false); DisplayAttribute attribute = (attrbutes.Length > 0) ? (DisplayAttribute)attrbutes[0] : null; showName = attribute == null ? enumStr : attribute.Name; } return showName; } }
4.创建形成select下拉菜单html的类和方法
public class SelectHelper { /// <summary> /// 创建select字符串 /// </summary> /// <typeparam name="TEnum">select枚举</typeparam> /// <param name="controlId">select的Id</param> /// <param name="controlName">select的Name</param> /// <param name="selectItem">选中项值</param> /// <returns></returns> public static HtmlString CreateEnumSelect<TEnum>(string controlId,string controlName,int selectItem=0) { StringBuilder selectHtml = new StringBuilder(); selectHtml.Append("<select id="+controlId+" name="+controlName+">"); //从枚举中反射获取成员 var values = from TEnum e in Enum.GetValues(typeof(TEnum)) select new {Value=e,Text=(e as Enum).GetDisplayName() }; foreach (var item in values) { //选中项 if (selectItem > 0 && selectItem == Convert.ToInt32(item.Value)) { selectHtml.Append("<option selected=selected value=" + Convert.ToInt32(item.Value) + ">" + item.Text + "</option>"); } else { selectHtml.Append("<option value=" + Convert.ToInt32(item.Value) + ">" + item.Text + "</option>"); } } selectHtml.Append("</select>"); var htmStr = new HtmlString(selectHtml.ToString()); return htmStr; } }
5.应用实现
<div id="noSelectHtml"></div><div id="selectHtml"></div><script src="~/Content/js/jquery-1.9.1.js"></script><script type="text/javascript"> $(function () { //不选中任何项 $("#noSelectHtml").html('@(HTYDTest.UtilClass.SelectHelper.CreateEnumSelect<HTYDTest.UtilClass.EnterpriseType>("enterpriseType", "enterpriseType"))'); //选中私营经济项 $("#selectHtml").html('@(HTYDTest.UtilClass.SelectHelper.CreateEnumSelect<HTYDTest.UtilClass.EnterpriseType>("enterpriseType", "enterpriseType",Convert.ToInt32(HTYDTest.UtilClass.EnterpriseType.privateOwned)))'); })</script>
6.效果展示
0 0
- 反射+枚举实现Select下拉菜单
- 可输入下拉菜单实现select
- select下拉菜单问题
- js select 下拉菜单
- select下拉菜单美化
- 实现select自动选择下拉菜单的值
- 用select下拉菜单来实现Ajax异步刷新
- select下拉菜单option文字粗体的实现方法
- select下拉菜单带图片
- easyui 验证下拉菜单select
- div模拟select下拉菜单
- Jquery绑定Select下拉菜单
- js控制select 下拉菜单
- select下拉菜单,无限加载切换菜单,实现自动加载子节点。
- Select下拉实现比较
- 实现select下拉框多选
- CSS实现下拉菜单
- 实现下拉菜单
- FLV 封装h264
- wordpress最新文章调用代码
- Servlet 工作原理解析
- JSON学习
- Easyui validatebox修改 以及自定义验证规则
- 反射+枚举实现Select下拉菜单
- Myeclipse导出jar包,spring无法扫描jar包中类以及配置文件的解决办法
- cocos2d-x在iOS/Android双平台上嵌入WebView
- 移动互联时代怎么利用搜索核心原则做SEO优化
- 定制Internet Explorer下载管理器
- android的SwipeRefreshLayout 扩展
- wordpress随机文章调用代码
- Exercise:Convolution and Pooling 代码示例
- 【Java笔记】Java形参长度可变方法