mvc2 DropDownListFor 不能选中绑定的值
Model:
public class EditUserViewModel{
public User user;
public IList<SelectListItem> RoleList = new List<SelectListItem>()
{
new SelectListItem(){Value="", Text="请选择"},
new SelectListItem(){Value="管理员", Text="管理员"},
new SelectListItem(){Value="用户", Text="用户"}
}
}
Controller:
EditUserViewModel m = new EditUserViewModel();
m.user = GetUser(); //user的Role是"用户"
return View(m);
View:
(正常写法)<%:Html.DropDownListFor(m => m.User.Role, Model.RoleList)%>
View里的DropDownListFor下拉列表里面有值,但选中的一直都是“请选择”,没有选中“用户”
解决办法:
<%:Html.DropDownListFor(m => m.User.Role, new SelectList(Model.RoleList, "Value", "Text", Model.User==null?string.Empty:Model.User.Role))%>
问题:此解决办法应该属于偏方吧,为什么正常写法不好用,求解答。
------最佳解决方案-------------------- m.user = GetUser(); //user的Role是"用户"
我就没看到你有代码去设置了 下拉菜单中的选中项
这个GetUser()方法只是获取了用户信息吧,你在什么地方根据用户信息设置了下拉菜单的“选中”呢
换言之,最终的 <select></select> 中的<option></option> 是需要一个 selected 来表示其处于选中状态的,楼主设置了没?
------其他解决方案--------------------(正常写法)<%:Html.DropDownListFor(m => m.User.Role, Model.RoleList)%>
这里只是给一个name为Role的select 加载了一堆option而已,并未指定哪个option处于选中状态
------其他解决方案--------------------控制器里,生成selectlist 的时候可以设定selectedValue
------其他解决方案--------------------你确认你的Value值是中文描述而不是数字标识?
m.User.Role =""? 管理员? 用户? ??
------其他解决方案--------------------确认,查看源文件就可看到<option value="用户">用户<option>
------其他解决方案--------------------我的意思,你的m.User.Role值也是中文么??
------其他解决方案--------------------确认,查看源文件就可看到<option value="用户">用户<option>
------其他解决方案--------------------问题应该和是不是中文没关系,要不然解决方法也不起做用,现在改用mvc4了,还不知道好用不,继续求解。
------其他解决方案--------------------mvc4也不好用,难道真的只能用偏方,继续求解。
------其他解决方案--------------------personball说的确实是这么回事,我觉得应该自己就根据m => m.User.Role选中了
我又找着一个偏方写法比上面的偏方要优雅,但是在model里还是要写一大堆的东西。
personball能给出个正规的解决方法吗?
还有的说是多个类型合并到一个类型后才这样,那往model传多个类型应该怎么处理呢,比如首页,继续求解。
------其他解决方案--------------------我是新手,理解起来可能的点慢,现在明白RoleList只是做为数据源,DropDownList构造的时候还要有一步从RoleList里取数据RoleList.Select(c => new SelectListItem { Text = c.Text, Value = c.Value, Selected = c.Value == 这个地方就是Model里的值 }),不知这样算不算正规写法,求解答。
PS:MVC用起来还是很舒服的,拉姆达表达式理解起来还是很困难的。