.net mvc------下拉列表DropDownList控件------绑定数据
下拉列表 以性别为例
绑定可以了,可以显示了,但有些地方就能传值,有些地方就会出错提示,如有大神请指教。。。。
错误如下:
具有键“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控件------绑定数据的更多相关文章
- c#中DropDownList控件绑定枚举数据
c# asp.net 中DropDownList控件绑定枚举数据 1.枚举(enum)代码: private enum heros { 德玛 = , 皇子 = , 大头 = , 剑圣 = , } 如果 ...
- [置顶] DataGridView控件---绑定数据方法
DataGridView控件是在windows应用程中显示数据最好的方式,它只需要几行简短的代码就可以把数据显示给用户,同时又支持增.删.改操作.今天将自己总结的增加数据的方法总结分 ...
- 在aspx页动态加载ascx页面内容,给GridView控件绑定数据
在aspx页动态加载ascx页面内容 //加载ascx页面内容Control c1 = this.Page.LoadControl("WebUserControl1.ascx"); ...
- DataGridVIew控件绑定数据之后的,增、插、删操作
最开始没有绑定数据,很快就实现了增.插.删操作,可是绑定数据之后,进行这些操作就会报错. 网上对这方面的资料比较少,自己摸索着找到了解决方法,也就是直接对绑定的数据进行操作,这里以DataTable为 ...
- DropdownList控件绑定数据源显示system.data.datarowview的问题
.net开发的时候经常需要用到在后台取数据再绑定到控件的问题,通常只需要连接数据库,从数据库取出数据,放到Dataset里面,然后再设置控件的DataSource为这个Dataset,然后再datab ...
- DataGridView控件绑定数据之后,置顶操作
一个小小的置顶,就搞了半个小时,还是记录一下吧. 1.第一个问题就是datatable的插入只能是Insert DataRow,但是获取选中的行,都是DataGridViewRow,不能直接转换. 找 ...
- C# DataGridView控件绑定数据后清空数据
//1.this.dataGridView1.DataSource = null;//会将DataGridView的列也删掉 //2.this.dataGridView1.Columns.Clear( ...
- wpf ListBox或ListView等数据控件 绑定数据,最简单的方式
在网上很难找最简单的案例,都是一大片,看着都头疼: 试试举一反三,如果把结果赋给DataContext这个属性,那就前台需要绑定ItemsSource="{Binding}",请注 ...
- GIRDVIEW 控件绑定数据后 后台c#控制隐藏某列
gv_EnterpriseInfo.DataSource = pageResult.Data; gv_EnterpriseInfo.DataBind(); 之后加判断条件: if (true) { g ...
随机推荐
- 配置IIS Express以便通过IP地址访问调试的网站
问题背景 最近使用C#编写了一个WebService,希望通过Java进行调用.使用Visual Studio 2013调试WebService时,可以在浏览器中通过localhost地址访问WSDL ...
- 《剑指offer》— JavaScript(18)二叉树的镜像
二叉树的镜像 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 相关知识 二叉树的镜像定义: 源二叉树 镜像二叉树 思路 有关二叉树的算法问题,一般都可以通过递归来解决.那么写一个正确的递归程序 ...
- 更新几篇之前写在公众号上的文章:线性可分时SVM理论推导;关联分析做捆绑销售和推荐;分词、去停用词和画词云
适合阅读人群:有一定的数学基础. 这几篇文章是16年写的,之前发布在个人公众号上,公众号现已弃用.回过头来再看这几篇文章,发现写的过于稚嫩,思考也不全面,这说明我又进步了,但还是作为学习笔记记在这里了 ...
- cura-engine学习(1)
cura-engine为开源3D打印软件cura的核心引擎代码,详细介绍参看github主页.现在学习的是一个简单版的https://github.com/repetier/CuraEngine,最新 ...
- 转:frame和iframe的区别
1.frame不能脱离frameSet单独使用,iframe可以: 2.frame不能放在body中:如下可以正常显示: <!--<body>--> <frameset ...
- Filebeat issue 排查--single.go:140: ERR Connecting error publishing events (retrying): dial tcp ****:5044: i/o timeout
我个人用docker搭建了一套日志分析平台:ELK+Filebeat 在正常跑了半个多月之后,Kibana刷新日志时突然发现日志不在更新了,停在某个时刻,就再也没有新log. 首先我查看了elk,lo ...
- 中文分词工具thulac4j正式发布
1. 介绍 thulac4j是THULAC的Java 8实现,相比于官方Java实现THULAC-Java,我们做了如下工作: 规范化分词词典,并去掉一些无用词: 重写DAT(双数组Trie树)的构造 ...
- java实现多叉树查找
package tree; import java.util.List; import java.util.ArrayList; import java.io.Serializable; public ...
- html表单 2017-03-10PM
在写表单之前补充一点:网页名以及属性的值命名都不能用中文,尽量用英文或拼音. html表单特写 1.表单格式 <form method="get/post" action=& ...
- http的几种请求的方式(Get、Post、Put、Head、Delete、Options、Trace和Connect)
http的这几种请求方式各有各的特点,适用于各自的环境.下面我就说说这些方式的各自特点: 1.Get:它的原理就是通过发送一个请求来取得服务器上的某一资源.获取到的资源是通过一组HTTP头和呈现数据来 ...