Html.DropDownListFor的选项值为字符型问题
来源:互联网 发布:php命名空间找不到类 编辑:程序博客网 时间:2024/06/05 08:19
我快要疯了。asp.net mvc的这个DropDownListFor,无论在服务器端如何设置,设置哪个值被选中,结果到了页面输出,选中值根本没有被选中,没有任何一个值被选中,下拉框只冷冰冰地显示一个“–请选择–”。
强调一下,如果对于 value 是数值型,而text是字符型来说,不存在以上问题;但如果value 和 text ,都是字符型,问题就像开头描述的那样。
我靠,太玄乎了吧。
花了好长时间,累到差点虚脱,我都怀疑自己是不是太老,不再适合搞开发了。连这种简单的问题都搞不定,说不过去啊。
后来发现:
1、服务器端设置哪个值被选中,或者默认值是啥,对于 DropDownListFor 不起作用,它会根据绑定的属性自动匹配;对 DropDownList 有作用;
比如:
public enum EYJStatus { [EnumTitle("解除")] 解除, [EnumTitle("蓝色")] 蓝色, [EnumTitle("黄色")] 黄色, [EnumTitle("橙色")] 橙色, [EnumTitle("红色")] 红色 }无论是在服务器端指定默认值var yjStatus = new SelectList(EnumHelper.GetItemKeyList<EYJStatus>().Select(s => s.ToString()).ToList(),"蓝色");还是不指定var yjStatus = new SelectList(EnumHelper.GetItemKeyList<EYJStatus>().Select(s => s.ToString()).ToList());然后ViewData.Add("STATE", yjStatus);在前端,都没有影响:@Html.DropDownListFor(m => m.STATE, null, "--请选择--", new { })
2、对于DropDownListFor,其参数 IEnumerable selectList,似乎只能设置成null,然后由系统自动对应到ViewData[“属性名”],通过这种方式才能起作用。比如:
var yjStatus = new SelectList(EnumHelper.GetItemKeyList<EYJStatus>().Select(s => s.ToString()).ToList());ViewData.Add("STATE", yjStatus);//有效,且能解决本文所说的问题@Html.DropDownListFor(m => m.STATE, null, "--请选择--", new { })//无效@Html.DropDownListFor(m => m.STATE, ViewData["STATE"] as IEnumerable<SelectListItem>, "--请选择--", new { })
3、DropDownListFor 会设置 IEnumerable selectList 的值
比如:
//服务器端var yjStatus = EnumHelper.GetItemKeyList<EYJStatus>().Select(s => new SelectListItem(){ Text = s.ToString(), Value = s.ToString(), Selected = (s.ToString() == "蓝色") ? true : false}).ToList();ViewData.Add("STATE", yjStatus);//前端@Html.DropDownListFor(m => m.STATE, null, "--请选择--", new { })@Html.DropDownList("STATE2", ViewData["STATE"] as IEnumerable<SelectListItem>, "--请选择--", new { })
结果第二个下拉框的默认值不再是“蓝色”,有可能是其他值;假如将两个下拉框调换一下位置:
@Html.DropDownList("STATE2", ViewData["STATE"] as IEnumerable<SelectListItem>, "--请选择--", new { })@Html.DropDownListFor(m => m.STATE, null, "--请选择--", new { })
则处于前面的下拉框永远显示“蓝色”。
如果能读一下asp.net mvc的相关源代码,应该可以明了个中原因吧。不过,要读懂并非易事,即使读懂,也改变了什么。
把时间花在这种应用型的处理办法上,真窝囊。但又不能不处理。再有,参数 IEnumerable selectList 一定要设置成null?这明显不符合常理,期望以后找到答案,或者有谁能告诉我一下。
- Html.DropDownListFor的选项值为字符型问题
- DropDownListFor的传值问题
- Asp.net MVC4 Html.DropDownListFor默认值问题的奇葩解决
- Ajax联动动态为@Html.DropDownListFor赋值
- 个别元素的绑定(<%:Html.DropDownListFor()%>)
- Html.DropDownListFor()通过ViewData绑定值
- ASP.NET.MVC--注解和反射将Enum转换List<SelectListItem>为@Html.DropDownListFor()下拉列表的通用方法
- @Html.DropDownListFor 设置默认值
- MVC中DropDownListFor使用及报错既有键值为“SightId”的值为String,应该为IEnumerable<selectlist>
- 下拉框Html.DropDownList 和DropDownListFor 的常用方法
- MVC Html.DropDownList 和DropDownListFor 的常用方法
- MVC Html.DropDownList 和DropDownListFor 的常用方法
- Add select with HTML DropDownListFor
- 关于.net mvc中@Html.DropDownListFor和@Html.DropDownList默认值无法选中问题
- 关于mvc中@Html.DropDownListFor和@Html.DropDownList默认值无法选中问题简单总结
- MVC中DropDownListFor赋初始选择值问题
- 字符串转换为HTML字符的方法
- javascript的转换特殊字符为HTML实体字符
- 理解java的三大特性之多态
- SSLHandshakeException异常处理
- HttpUrlConnection与HttpClient的认识(三)-HttpClient的使用
- unit 8
- LeetCode-Easy部分中标签为Two Pointers 125. Valid Palindrome
- Html.DropDownListFor的选项值为字符型问题
- JQuery 定时循环任务
- 常用的富文本编辑器
- Zookeeper源码环境搭建
- 蓝桥杯_凑算式
- 多线程自增问题
- Java学习之类与对象
- 设计模式 之抽象工厂
- 同时使用两种方式启动服务