下拉列表 以性别为例

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

错误如下:

具有键“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);
        }
    }
}

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

最新文章

  1. java基础知识总结(2)
  2. 教你看懂 OpenStack 日志 - 每天5分钟玩转 OpenStack(29)
  3. coderforces 721b
  4. 微软职位内部推荐-Senior Development Engineer
  5. Hello,cnblog‘s world!
  6. codeforces 486C. Palindrome Transformation 解题报告
  7. oracle 循环语句
  8. Windowsphone本地应用信息与市场信息的获取
  9. xcode笔记
  10. IOS 面试 --- 动画 block
  11. nRF24LE1/nRF31512烧录驱动开发
  12. J2EE进阶(三)struts2 &lt;s:action&gt;标签的用法
  13. python爬虫入门(九)Scrapy框架之数据库保存
  14. 了解spring
  15. python学习 生成随机函数 random模块的用法
  16. ES6 字符串
  17. esay-ui学习笔记(一)
  18. java.sql.SQLException: Prepared or callable statement has more than 2000 parameter markers及解决方案
  19. 文本按列导入excel
  20. php设计模式:单例模式

热门文章

  1. android学习18——对PathMeasure中getPosTan的理解
  2. WP8.1开发中ListView控件加载图列表的简单使用(1)
  3. 存储过程与SQL语句如何选择
  4. 每天一个Linux命令(11)--nl命令
  5. “幸福企业”定义-参观“MES项目”有感
  6. JS中一些常用的内置对象
  7. Palindrome Linked List leetcode
  8. express 4
  9. 关于如何介绍spring框架。
  10. eclipse和myeclipse设置默认编码格式为UTF-8