在使用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的问题,没想到今天可以这么轻松地解决,意外的惊喜!!!!!!