deliberate lies - interactive DHTML

deliberate lies

Defiant, stony, deliberate, their lies will not get in my way.

如何显示含有特殊字符的枚举值

要求UI层的下拉框显示为:

其他(请在说明中填写),
信息费,
信息费(国研网数据库),
信息服务费,
咨询费

-----------

首先括号是不能被定义为枚举值的,所以要将括号部分单独定义在描述里面,那么枚举值去掉括号,大家会发现有两个信息费,枚举值是不允许有相同的出现,所以简单操作替换一下即可:

model层定义枚举:

//定义枚举描述
//发票项目
    public enum InvoiceType 
    {
        //特殊字符无法写入name中,故采用此方式填写,例如,下列要显示的大括号就属于特殊字符
        [Description("(请在说明中填写)")]
        其他=1,
        信息费=2,
        [Description("(国研网数据库)")]
        信息费一=3,
        信息服务费=4,
        咨询费=5

    }

handler层获取枚举值和描述部分,并进行替换拼接:

using System.ComponentModel;

#region 获取枚举特殊字符描述,此方法的unit按照系统默认的开始计算,不是按照定义的value计算,系统默认第一个unit从0开始
        public static String GetEnumSpecialWordDescription(int dataUnit)
        {
            var e = Enum.GetNames(typeof(InvoiceType))[dataUnit];
            InvoiceType enumValue = (InvoiceType)Enum.Parse(typeof(InvoiceType), e);
            if (e == null)
            {
                return "";
            }
            var enumInfo = enumValue.GetType().GetField(e.ToString());
            var enumAttributes =
                (DescriptionAttribute[])enumInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
            return enumAttributes.Length > 0 ? enumAttributes[0].Description : "";
        }
        #endregion 

#region 根据传递的条件不同,拼接下拉框的json串,按照枚举的是设定,一一对应拼接
        private string InitCommonJsonForComboBox(string et)
        {
            StringBuilder json = new StringBuilder();
            //获取枚举类型的通用工厂类
            Type enumType = GetEnumTypeFactory(et);
            string[] enumNameArray = Enum.GetNames(enumType);
            Array enumValueArray = Enum.GetValues(enumType);
            json.Append("[");
            for (int i = 0; i < enumNameArray.Length; i++)
            {
                //for (int j = 0; j < enumValueArray.Length; j++)
                //{
                json.Append("{\"id\":" + Convert.ToInt32(Enum.Parse(enumType, enumNameArray[i], true)) + ",\"text\":\"" + (enumType.Name == "InvoiceType" ? ((enumNameArray[i]+GetEnumSpecialWordDescription(i)).Replace("","")) : enumNameArray[i]) + "\"");
                json.Append("}");
                if (i != (enumNameArray.Length - 1))
                {
                    json.Append(",");
                }
                //}

            }
            json.Append("]");
            return json.ToString();
        }
        #endregion

小弟这个方法比较笨拙,如何高见,不吝赐教,谢谢各位

 

posted on 2017-05-03 13:27  悲淚滿衣襟  阅读(656)  评论(0编辑  收藏  举报

导航