Asp.Net 之 枚举类型的下拉列表绑定

有这样一个学科枚举类型:

/// 学科
/// </summary>
public enum Subject
{
     None = 0,
     [Description("语文")]
     Chinese = 1, 

     [Description("数学")]
     Mathematics = 2, 

     [Description("英语")]
     English = 3, 

     [Description("政治")]
     Politics = 4, 

     [Description("物理")]
     Physics = 5, 

     [Description("化学")]
     Chemistry = 6, 

     [Description("历史")]
     History = 7, 

     [Description("地理")]
     Geography = 8, 

     [Description("生物")]
     Biology = 9
}

这里使用了一个Description特性,目的是为了在一个DropDownList列表中绑定文本数据。

这里使用了一个扩展方法,目的为了返回一个Value和Text的数据列表,上方法:

/// 枚举辅助类
    /// </summary>
    public static class EnumHelper
    {
        /// <summary>
        /// 获得枚举类型数据项(不包括空项)
        /// </summary>
        /// <param name="enumType">枚举类型</param>
        /// <returns></returns>
        public static IList<object> GetItems(this Type enumType)
        {
            if (!enumType.IsEnum)
                throw new InvalidOperationException();

            IList<object> list = new List<object>();

            // 获取Description特性
            Type typeDescription = typeof(DescriptionAttribute);
            // 获取枚举字段
            FieldInfo[] fields = enumType.GetFields();
            foreach (FieldInfo field in fields)
            {
                if (!field.FieldType.IsEnum)
                    continue;

                 // 获取枚举值
                int value = (int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null);

                // 不包括空项
                if (value > 0)
                {
                    string text = string.Empty;
                    object[] array = field.GetCustomAttributes(typeDescription, false);

                    if (array.Length > 0) text = ((DescriptionAttribute)array[0]).Description;
                    else text = field.Name; //没有描述,直接取值

                    //添加到列表
                    list.Add(new { Value = value, Text = text });
                }
            }
            return list;
        }
    }

这里采用特性反射的方式得到了对应的Value和Text,最后返回了一个new { Value = …, Text = … }的匿名类的列表。

那么页面上实现就相当简单了:

ddlSubject.DataSource = typeof(Subject).GetItems();
ddlSubject.DataTextField = "Text";
ddlSubject.DataValueField = "Value";
ddlSubject.DataBind();
时间: 2025-01-04 04:30:06

Asp.Net 之 枚举类型的下拉列表绑定的相关文章

Asp.Net 将枚举类型(enum)绑定到ListControl(DropDownList)控件

在开发过程中一些状态的表示使用到枚举类型,那么如何将枚举类型直接绑定到ListControl(DropDownList)是本次的主题,废话不多说了,直接代码: 首先看工具类代码: /// <summary> /// 通过枚举类型 绑定到ListControl 控件的通用类 /// 用法:直接传入要绑定的Control: EnumManager<枚举>.Bind_Enum_Control(ListControl); /// </summary> /// <typep

在WPF中使用变通方法实现枚举类型的XAML绑定

问题缘起 WPF的分层结构为编程带来了极大便利,XAML绑定是其最主要的特征.在使用绑定的过程中,大家都普遍的发现枚举成员的绑定是个问题.一般来说,枚举绑定多出现于与ComboBox配合的情况,此时我们希望实现的目标有: 建立选择项与ItemsSource的对应关系: 自动获取用于ItemsSource的枚举源: 自定义下拉框中显示的内容. 对于目标1,考虑最简单的模式,即枚举的定义采用从0开始的连续整数,可以使用IValueConverter接口来实现从枚举到整型的双向转换,以使得枚举成员绑定

asp.net MVC 枚举类型的处理的几种方式

1.基架自动生成@Html.EnumDropDownListFor()辅助方法映射到模型类属性的元数据. @model MajorConstruction.Models.Course <div class="form-group"> @Html.LabelFor(model => model.CourseType, htmlAttributes: new { @class = "control-label col-md-2" }) <div

Entity Framework 的枚举类型

新增数据模型,新增“实体”之后,新增“枚举类型”,创建Enum值,将“实体”中的列和Enum关联,选中“实体”中的列属性改变类型为Enum名称,生成数据库…… 如下转自:http://item.congci.com/item/entity-framework-meiju-leixing-enum 第一步:先创建一个实体对象,在VS 2012里面实体对象还可以修改实体颜色 第二步:对象已经有了,接着创建一个Type,Type为Enum,内部与外部(Internal and External),在空

5.9 enum--支持枚举类型

enum模块提供了枚举类型的支持.枚举类型是由一个名称和一个统一值来组成,值是常量的值,它们之间可以通过名称进行比较和引用,还可以迭代访问. 5.9.1 模块内容 本模块主要定义了两种枚举类型:Enum和IntEnum.定义了一个装饰器函数unique(),以便保证所有枚举常量的唯一性. class enum.Enum 构造枚举常量的基类. 例子: #python 3.4 import enum class Color(enum.Enum): red = 1 green = 2 blue = 3

DELPHI设置枚举类型size

delphi枚举类型长度默认为2个字节(单字),而在C中枚举为4个字节(双字),如果需要跨这两个平台编程,传输结构时会由于数据长度不一造成灾难. 经过查找资料,原来delphi可以通过{$Z+} {$Z-} {$Z1} {$Z4} 等宏设置枚举类型的长度,小至1个字节,大至4个字节. 官方说明如下: http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/comp

ASP.NET WebForm中前台代码如何绑定后台变量

转载自 http://www.cnblogs.com/lerit/archive/2010/10/22/1858007.html 经常会碰到在前台代码中要使用(或绑定)后台代码中变量值的问题.一般有<%= str%>和<%# str %>两种方式,这里简单总结一下.如有错误或异议之处,敬请各位指教. 一方面,这里所讲的前台即通常的.aspx文件,后台指的是与aspx相关联的CodeBehind,文件后缀名为.aspx.cs:另一方面,这里的绑定是指用户发出访问某一页面指令后,服务器

swift枚举_003_swift枚举类型

//: Playground - noun: a place where people can play import UIKit //------枚举---------// //1.Swift中的枚举 //描述一个人的性别(0:男,1:女,2:不详) //enum Sex { //枚举类型 // case Male //枚举值 // case Female // case Unknown // //} // ////定义枚举变量 //var mySex : Sex = Sex.Female /

在命名空间RegularExpressions里有下面这些对象,10个类,一个代理,一个枚举类型

摘抄自:http://blog.csdn.net/weiwenhp/article/details/7665816 Classes   Class Description   Capture Represents the results from a single subexpression capture. Capture represents one substring for a single successful capture.   CaptureCollection Represen