Asp.net MVC4 Html.DropDownListFor默认值问题的奇葩解决

在使用Asp.net MVC4  Html.DropDownListFor的时候,有一个问题困扰了我好久,这就是下拉列表的问题。

一般说来,在创建一个下拉列表直接使用Razor的Html.DropDownList就可以了,而在需要模型绑定的时候,直接使用Html.DropDownListFor就可以了。现在的问题就是默认值的问题。比如说,你发表了一篇博客,选择好了文章类别,但是当你再次修改它的时候,文章类型应该也是可以可以在下拉列表里面选择的,而且默认选中的类别就是它当初选中的类别。

试了很多办法,都很难有效且优雅地解决这个问题。默认值总是无效。后来还用上了重写Html.DropDownListFor的方式。直到今天,同事问我,为什么一个下拉列表的默认值可以很好地工作,但是同样形式写的另一个却不可以,下面是这两段不同的代码:

 @Html.DropDownListFor(m => m.Province.Id, ViewData["Provinces"] as SelectList)(这是可以有效工作的代码)


@Html.DropDownListFor(m => m.User.Id, ViewData["User"] as SelectList)

(这是绑定默认值无效的代码)


如果大家仔细看,就可以发现,上下两行代码基本是一模一样的,除了一点小小的差别,那就是一个的ViewData的索引是复数,一个是单数,那么这个单数和复数会引起什么大的区别吗?

经过测试,我可以肯定地说,会引起很大的区别,区别就是一个默认值可以有效工作,而另一个,不行。这就是Html.@Html.DropDownListFor之前被我认为是一个BUG的问题,没想到今天可以这么轻松地解决,意外的惊喜!!!!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值