经过查询资料和自己的测试,发现
@Html.DropDownListFor(M=>M.A, Model.A)
@Html.DropDownList("A", Model.A)
不能使用相同的名称,否则设置默认值无效,有没有官方的说明说这2者不能是一样名称的
都是生成html元素,你设置一样的name,怎么搞?这个官方不用说明,因为怎么用权利在你手里。
并不是上面2个写在同一个页面,单独的一个都是错的
@bird man: 单独一个都是错的,是因为你用法错误。
@幻天芒: 我换个问法吧,为什么@Html.DropDownList("A", Model.A)使用这个的时候不能设置默认值,如果使用@Html.DropDownList("B", Model.A)就可以
@bird man: 我是想说,你这样的用法对么?
//DropDownListFor的用法 @Html.DropDownListFor(M=>M.A, IEnumerable<SelectListItem> selectList, object htmlAttributes) //此时要设置选中项的话,只需要对Model中A的属性赋值即可。 //DropDownList的用法 @Html.DropDownList(string name,IEnumerable<SelectListItem> selectList, object htmlAttributes) //此时要设置选择项的话,需要将selectList中的某一个项的Selected设置为true。
@幻天芒: 正如你所说的,DropDownListFor 我设置了IEnumerable<SelectListItem> selectList中某个项为选中的,使用@Html.DropDownListFor(M=>M.A, Model.A)这种写法的时候无法实现默认值选中.
@Html.DropDownListFor(M=>M.B, Model.A)却可以,运行之后除了默认值以外其他都一样,@Html.DropDownList也是出现上面一样的情况,不知道你有没有测试过
假设Model类如下有如下
public class Model
{
public List<SelectListItem> A{get;set;}
public string B{get;set;}
}
@bird man: 在使用DropDownListFor的时候,设置默认值是通过M.A来设置的,不是在selectList中设置选中项。你的第一种做法中:M.A是和Model.A相等的,这样的用法实际上是错误的。M.A应该是一个string才对。
@幻天芒: 那为什么DropDownList在使用的时候,Html.DropDownList("A", Model.A)这样也会出现无法选择默认值呢,这里name和selectlist应该不会算是一个了吧
//DropDownList的用法 @Html.DropDownList(string name,IEnumerable<SelectListItem> selectList, object htmlAttributes)
@bird man: 这种用法中,默认值需要在selectList中的一个项上设置Selected=true。
@幻天芒: Html.DropDownList("A", Model.A)这么写,默认值不行,但是Html.DropDownList("A", IEnumerable<SelectListItem> selectList)这样就正常,好奇怪的
谢谢帮忙
@bird man: Model.A中设置 了默认值么?
@幻天芒: 设置了
纸上谈兵啊....