我快要疯了。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的选项值为字符型问题的更多相关文章

  1. golang 字符型

    目录 前言 1. 基本 介绍 2. 声明 3. 使用细节 4. 字符类型的本质 跳转 前言 不做文字的搬运工,多做灵感性记录 这是平时学习总结的地方,用做知识库 平时看到其他文章的相关知识,也会增加到 ...

  2. C语言之将无符号字符型转化为ascii码值

    这个宏是在linux内核中获取的,主要的功能是能够将一个无符号字符型的参数转化为ASCII码值. ASCII : ASCII 编码里包括了128个字符.用 十进制 0  到 127 来表示 .那就对了 ...

  3. 【Java】Java_08 字符型与布尔值

    1.字符型(2个字节) 单引号用来表示字符常量.例如‘A’是一个字符,它与“A”是不同的,“A”表示含有一个字符的字符串 char 类型用来表示在Unicode编码表中的字符 Unicode编码被设计 ...

  4. java 基础--8 种基本数据类型:整型、浮点型、布尔型、字符型 整型中 byte、short、int、long 的取值范围 什么是浮点型?什么是单精度和双精度?为什么不能用浮点型表示金额?

     一.8种基本数据类型(4整,2浮,1符,1布): 整型:byte(最小的数据类型).short(短整型).int(整型).long(长整型): 浮点型:float(浮点型).double(双精度浮点 ...

  5. [验证码识别技术] 字符型验证码终结者-CNN+BLSTM+CTC

    验证码识别(少样本,高精度)项目地址:https://github.com/kerlomz/captcha_trainer 1. 前言 本项目适用于Python3.6,GPU>=NVIDIA G ...

  6. 字符型图片验证码识别完整过程及Python实现

    字符型图片验证码识别完整过程及Python实现 1   摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...

  7. (转)C语言16进制输出字符型变量问题

    最近在做一个C的嵌入式项目,发现在C语言中用printf()函数打印字符型变量时,如果想采用"%x"的格式将字符型变量值以十六进制形式打印出来,会出现一个小问题,如下: char  ...

  8. 如何为编程爱好者设计一款好玩的智能硬件(九)——LCD1602点阵字符型液晶显示模块驱动封装(下)

    六.温湿度传感器DHT11驱动封装(下):如何为编程爱好者设计一款好玩的智能硬件(六)——初尝试·把温湿度给收集了(下)! 七.点阵字符型液晶显示模块LCD1602驱动封装(上):如何为编程爱好者设计 ...

  9. 如何为编程爱好者设计一款好玩的智能硬件(七)——LCD1602点阵字符型液晶显示模块驱动封装(上)

    当前进展: 一.我的构想:如何为编程爱好者设计一款好玩的智能硬件(一)——即插即用.积木化.功能重组的智能硬件模块构想 二.别人家的孩子:如何为编程爱好者设计一款好玩的智能硬件(二)——别人是如何设计 ...

随机推荐

  1. FOJ Problem 2253 Salty Fish

                                                                                                        ...

  2. SharePoint 2013 Custom MasterPage

    <%@Master language="C#"%> <%@ Register Tagprefix="SharePoint" Namespace ...

  3. 【CF52C】Circular RMQ(线段树区间加减,区间最值)

    给定一个循环数组a0, a1, a2, …, an-1,现在对他们有两个操作: Inc(le, ri, v):表示区间[le, ri]范围的数值增加v Rmq(le, ri):表示询问区间[le, r ...

  4. 【BZOJ入门3189】 猜数字(数学,搜索)

    Description 味味最近在玩猜数字的游戏,现在她也希望你来玩一下这个游戏.猜数字游戏的规则是这样的,告诉你一个正整数 n(2<=n<=11),然后味味心中会想一个 n 个数字组成的 ...

  5. 52深入理解C指针之---不透明指针

    该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教.一.size_t:用于安全表示长度,所有平台和系统都会解析成自己对应的长度 1.定义:s ...

  6. dedecms--二次开发之前后台登录分开

    最近在写dedecms系统下会员功能二次开发,然后发现在本地测试的时候每次登录后台,管理员帐号都会在前台页面也显示登录了,但是如果真的是在前台页面用管理员账号登录的话那是登陆不了的,所以我觉得这样的效 ...

  7. Codeforces 629 A. Far Relative’s Birthday Cake

      A. Far Relative’s Birthday Cake   time limit per test 1 second memory limit per test 256 megabytes ...

  8. java 8 LocalDateTime 20 例

    http://www.importnew.com/15637.html 伴随lambda表达式.streams以及一系列小优化,Java 8 推出了全新的日期时间API,在教程中我们将通过一些简单的实 ...

  9. cmake ccmake

    下载libqrencode源码编译过程 git clone https://github.com/fukuchi/libqrencode.git 2001  mkdir build 2002  cd ...

  10. Arduino可穿戴教程ArduinoIDE新建编辑源文件

    Arduino可穿戴教程ArduinoIDE新建编辑源文件 Arduino IDE新建源文件 Arduino IDE启动后默认就新建了一个源文件,如图2.20所示.新建的源文件名称是以sketch_开 ...