如何显示含有特殊字符的枚举值
要求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
小弟这个方法比较笨拙,如何高见,不吝赐教,谢谢各位