下拉列表 以性别为例

绑定可以了,可以显示了,但有些地方就能传值,有些地方就会出错提示,如有大神请指教。。。。

错误如下:

具有键“sex”的 ViewData 项属于类型“YTgoShopping.Utilities.sex”,但它必须属于类型“IEnumerable<SelectListItem>”。

具有键“sex”的 ViewData 项属于类型“Int32”,但它必须属于类型“IEnumerable<SelectListItem>”。

--------------------------------------

代码复制格式乱就用 ctrl+K+D

代码没写全,如果出现波浪线请 解析—引用

---------------------------------------

视图代码

//表达式,对象的集合,一个对象-----第一个为空的值

@Html.DropDownListFor(model => model.sex,ViewBag.sex as IEnumerable<SelectListItem>,“请选择性别”)

@Html.DropDownListFor(model => model.sex,ViewBag.sex as SelectList,“请选择性别”)

  //要放回窗体的名称---一般为model的字段,对象的集合,一个对象--第一个为空的值

@Html.DropDownList("sex",ViewBag.sex as IEnumerable<SelectListItem>,"请选择性别")

@Html.DropDownList("sex",(SelectList)ViewData["sex"],"请选择性别")

@Html.DropDownList("sex","请选择性别")

控制器代码

public ActionResult EditInfo(int id)
        {
            Admin Admins = db.Admins.Where(a => a.AdminID == id).FirstOrDefault();
            ViewBag.sex = new SelectList(EnumHelper.GetSelectList<sex>(),"Value","Text", Admins.sex);//这句可换
            return View(Admins);
        }

数据源为枚举的

//参数依次为数据集合,数据值,数据文本,选中项的值--默认项

ViewBag.sex = new SelectList(EnumHelper.GetSelectList<sex>(),"Value","Text", Admins.sex);

ViewData["sex"]= new SelectList(EnumHelper.GetSelectList<sex>(),"Value","Text", Admins.sex);

//参数依次为数据集合,选中项的值--默认项

  ViewBag.sex= new SelectList(Enum.GetValues(typeof(sex)), "");

数据源为表的

  ViewBag.list = new SelectList(db.sex, "Id", "Name", "");

枚举代码

public enum sex
    {
        女 = 0,
        男 = 1,
        其他 = 2,
    }

public enum sex
    {
        /// <summary> 
        /// 女 
        /// </summary> 
        [SelectDisplayName("女")]
        Female = 0,

/// <summary> 
        /// 男 
        /// </summary> 
        [SelectDisplayName("男")]
        Male = 1,

/// <summary> 
        /// 其他 
        /// </summary> 
        [SelectDisplayName("其他")]
        Other = 2
    }

用第二种枚举想要获取中文就要用以下方法

  获取枚举注释

namespace Common
{

/// <summary> 
    /// 自定义注解属性 
    /// </summary> 
    public class SelectDisplayNameAttribute : Attribute
    {
        private string _diaplayName;
        public string DisplayName
        {
            get
            {
                return _diaplayName;
            }
        }
        public SelectDisplayNameAttribute(string displayName)
        {
            _diaplayName = displayName;
        }

}

public class EnumHelper
    {
        /// <summary> 
        /// 获取自定义属性获取的内容 
        /// </summary> 
        /// <param name="obj"></param> 
        /// <returns></returns> 
        private static string GetEnumDescription(Object obj)
        {

//获取枚举对象的枚举类型 
            Type type = obj.GetType();
            //通过反射获取该枚举类型的所有属性 
            FieldInfo[] fieldInfos = type.GetFields();
            foreach (FieldInfo field in fieldInfos)
            {
                //不是参数obj,就直接跳过 
                if (field.Name != obj.ToString())
                {
                    continue;
                }
                //取出参数obj的自定义属性 
                if (field.IsDefined(typeof(SelectDisplayNameAttribute), true))
                {
                    return (field.GetCustomAttributes(typeof(SelectDisplayNameAttribute), true)[0] as SelectDisplayNameAttribute).DisplayName;
                }

}
            return obj.ToString();
        }

/// <summary> 
        ///  将枚举类型的值和自定义属性配对组合为 List<SelectListItem/>
        /// </summary> 
        /// <param name="enumType"></param> 
        /// <returns></returns> 
        public static List<SelectListItem> GetSelectList<T>(object defaultvalue=null)
        {
            var enumType = typeof(T);
            List<SelectListItem> selectList = new List<SelectListItem>();
            foreach (var obj in Enum.GetValues(enumType))
            {
                // 注意一定要Value = obj.ToString()  
                //原因是Value = (int)(obj.ToString()),这样取的枚举是对应的int值,在@Html.DropDownListFor中是无法显示默认选中值的,问题原因未解 
                selectList.Add(new SelectListItem { Text = GetEnumDescription(obj), Value = obj.ToString() });
            }
            return selectList;
        }
        public static string GetEnumName(Object obj)
        {
            return GetEnumDescription(obj);
        }
    }
}

欢迎大神来订正我!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.net mvc------下拉列表DropDownList控件------绑定数据的更多相关文章

  1. c#中DropDownList控件绑定枚举数据

    c# asp.net 中DropDownList控件绑定枚举数据 1.枚举(enum)代码: private enum heros { 德玛 = , 皇子 = , 大头 = , 剑圣 = , } 如果 ...

  2. [置顶] DataGridView控件---绑定数据方法

             DataGridView控件是在windows应用程中显示数据最好的方式,它只需要几行简短的代码就可以把数据显示给用户,同时又支持增.删.改操作.今天将自己总结的增加数据的方法总结分 ...

  3. 在aspx页动态加载ascx页面内容,给GridView控件绑定数据

    在aspx页动态加载ascx页面内容 //加载ascx页面内容Control c1 = this.Page.LoadControl("WebUserControl1.ascx"); ...

  4. DataGridVIew控件绑定数据之后的,增、插、删操作

    最开始没有绑定数据,很快就实现了增.插.删操作,可是绑定数据之后,进行这些操作就会报错. 网上对这方面的资料比较少,自己摸索着找到了解决方法,也就是直接对绑定的数据进行操作,这里以DataTable为 ...

  5. DropdownList控件绑定数据源显示system.data.datarowview的问题

    .net开发的时候经常需要用到在后台取数据再绑定到控件的问题,通常只需要连接数据库,从数据库取出数据,放到Dataset里面,然后再设置控件的DataSource为这个Dataset,然后再datab ...

  6. DataGridView控件绑定数据之后,置顶操作

    一个小小的置顶,就搞了半个小时,还是记录一下吧. 1.第一个问题就是datatable的插入只能是Insert DataRow,但是获取选中的行,都是DataGridViewRow,不能直接转换. 找 ...

  7. C# DataGridView控件绑定数据后清空数据

    //1.this.dataGridView1.DataSource = null;//会将DataGridView的列也删掉 //2.this.dataGridView1.Columns.Clear( ...

  8. wpf ListBox或ListView等数据控件 绑定数据,最简单的方式

    在网上很难找最简单的案例,都是一大片,看着都头疼: 试试举一反三,如果把结果赋给DataContext这个属性,那就前台需要绑定ItemsSource="{Binding}",请注 ...

  9. GIRDVIEW 控件绑定数据后 后台c#控制隐藏某列

    gv_EnterpriseInfo.DataSource = pageResult.Data; gv_EnterpriseInfo.DataBind(); 之后加判断条件: if (true) { g ...

随机推荐

  1. iOS上传代码到Github平台

    对于开发人员来说,很多时候想把自己好的代码 demo放到一个公共平台,与大家交流,Github就是一个不错的平台,下面给大家说说Github的具体使用方法. 第一步.申请Github账号.https: ...

  2. JAVA三大特性之二——继承

    很多人在学习了JAVA以后,都会了解这个概念,而且继承也会在以后的开发中经常用到,但对于JAVA的继承特性,很多人都了解的不够深入,不够完整,当然这其中包括我,所以我就想抽点时间来整理一下JAVA继承 ...

  3. IntelliJ IDEA 报错:Error:java: 未结束的字符串文字

    构建javaweb项目时,控制台报错: 这个问题是由于编码冲突导致的,在设置中找到File Encodings可以看到 ide采用utf-8编码格式,而项目则是GBK编码方式,由此产生冲突. 解决办法 ...

  4. MD5算法学习整理

    一路学来 记得笔记不少 但是给自己看 当时就记得很随意 以为后面都懂 但还是太单纯了,现在回顾 自己都完全看不下去,所以以后的都放的博客上,让自己看懂,让感兴趣的看懂,详细,暴力 不废话了 MD5算法 ...

  5. linux 下rabbitmq 安装

    准备工作: erlang环境  otp_src_19.0.tar.gz rabbitmq   abbitmq-server-generic-unix-3.6.5.tar.xz # yum -y ins ...

  6. Android中Handler使用浅析

    1. Handler使用引出 现在作为客户,有这样一个需求,当打开Activity界面时,开始倒计时,倒计时结束后跳转新的界面(思维活跃的朋友可能立马想到如果打开后自动倒计时,就类似于各个APP的欢迎 ...

  7. Sublime Text 3 (Build 3126) 最新注册码

    Sublime Text 作为程序员开发神器,听说最新版更新了 并且增加了不少新特性.马上到官网下载了最新版 Sublime Text 3 3126 使用了下,反应速度比以前的确更快了.随手找了几个S ...

  8. SQLDataSet中执行DDL语句

    在SQLDataSet中执行我们输入的DDL语句,并观察执行结果. 这里为了省输入的时间,从先输好的记事本中复制的SQL语句.效果图: ******************************** ...

  9. Eclipse-ee 启动Tomcat后浏览器无法访问Tomat,并且Web项目服务部署

    环境: Ubuntu 14.04 + Eclipse-ee +  Tomcat7 问题: 在Eclipse中建立Server时选择的Tomcat7,Server的运行时选择的时自己安装的Tomcat目 ...

  10. 辗转相除法求H.C.F小结

    辗转相除法 大纲: 问题 原理 反思 1.     问题 一个试题,请完成以下填空 下列程序是利用辗转相除法求H.C.F(最大公约数) include <stdio.h> int main ...