再次运行页面,您将看到,DropDownList中对应Value1显示的信息为custom desc of Value1,而对应Value2显示的信息为Default Desc of Value2。为什么呢?因为对Value1我们能取到MyEnumDescriptionAttribute返回的自定义信息,而对Value2,MyEnumDescriptionAttribute返回null,那么,默认的描述信息将被应用。是不是很神奇呢?
甚至,您可以对同一个Enum类型的不同成员项混合使用不同的EnumDescriptionAttribute或其继承类来指定描述信息(有这样的需求吗^-^)。但是,每个枚举项只有第一个EnumDescriptionAttribute或其继承类标注会生效,多余的标注会被忽略。
好了,基本介绍完了,斗胆称这个方案为完美方案,别扔臭鸡蛋就好。:)
篇后语
除了结合数据绑定控件使用EnumDescriptionAttribute之外,您也可以单独使用EnumDescriptionAttribute以透明获取的枚举值描述信息。调用EnumDescriptionAttribute.GetDescriptions(enumType)这个静态方法就可以得到指定枚举类型的所有枚举值的由EnumDescriptionAttribute或其继承类标注的描述信息。
DropDownListField类是参考ASP.NET内置的CheckBoxField类写的。
下载
本文介绍的组件的全部源码和示例代码包含于最新版本的nbear中,EnumDescriptionAttribute定义于src\NBear.Common\EnumDescriptionAttribute.cs,DropDownListField定义于src\NBear.Web.Data\DropDownListField。示例程序位于tutorials\NBearDataSourceSample。
可以从NBear的官方网站下载:http://nbear.org
-
[05/26修订]——增加支持第三方枚举描述,支持二进制与过的枚举值。包含于NBearV3.7.1 build 7以上版本。
1、对于在第三方已编译程序集中的枚举类型,也就是说我们没有机会直接添加EnumDescriptionAttribute到枚举定义的,现在也支持了。只需要额外定义一个与外部枚举类型对应的枚举类型,保证两个枚举类型的枚举项的int值相等即可,在这个新枚举类型中标注EnumDescriptionAttribute即可。当然,此时,EnumType属性需要填新的枚举类型名称。
2、对于枚举值支持二进制与的枚举值,现在也支持了,无需额外设置。不过这种枚举值的insert和edit如果需要更新为合并值,还是需要用户自行写代码完成。这里仅仅是支持到显示这样的值。
//本文结束