ASP.NET MVC中为DropDownListFor设置选中项的方法
在MVC中,当涉及到强类型编辑页,如果有select元素,需要根据当前Model的某个属性值,让Select的某项选中。本篇只整理思路,不涉及完整代码。
□思路
往前台视图传的类型是List<SelectListItem>,把SelectListItem选中项的Selected属性设置为true,再把该类型对象实例放到ViewBag,ViewData或Model中传递给前台视图。
通过遍历List<SelectListItem>类型对象实例
□控制器
publicActionResultSomeAction(intid) { //从数据库获取DomainModel vardomainModel=ModelService.LoadEntities(m=>m.ID==id).FirstOrDefault<Model>(); //通过某个方法获取List<SelectListItem>类型对象实例 List<SelectListItem>items=SomeMethod(); //遍历集合,如果当前Domainmodel的某个属性与SelectListItem的Value属性相等,把SelectListItem的Selected属性设置为true foreach(SelectListItemiteminitems) { if(item.Value==Convert.ToString(domainModel.某属性)) { item.Selected=true; } } //把List<SelectListItem>集合对象实例放到ViewData中 ViewData["somekey"]=items; //可能涉及到把DomainModel转换成ViewModel returnPartialView(domainModel); }
□前台视图显示
@modelDomainModel
@Html.DropDownListFor(m=>m.SomeProperty,(List<SelectListItem>)ViewData["somekey"],"==请选择==")
通过遍历Model集合
给ViewModel设置一个bool类型的字段,描述是否被选中。
把Model的某些属性作为SelectListItem的Text和Value值。根据ViewModel中的布尔属性判断是否要把SelectListItem的Selected设置为true.
□ViewModel
publicclassDepartment { publicintId{get;set;} publicstringName{get;set;} publicboolIsSelected{get;set;} }
□控制器
publicActionResultIndex() { SampleDbContextdb=newSampleDbContext(); List<SelectListItem>selectListItems=newList<SelectListItem>(); //遍历Department的集合 foreach(Departmentdepartmentindb.Departments) { SelectListItem=newSelectListItem { Text=department.Name, Value=department.Id.ToString(), Selected=department.IsSelected.HasValue?department.IsSelected.Value:false } selectListItems.Add(selectListItem); } ViewBag.Departments=selectListItems; returnView(); }
下面是其它网友的补充:
后台代码:
publicActionResultIndex(FormCollectioncollection) { IList<Project>li=Utility.SqlHelper.getProjectList(); SelectListselec=newSelectList(li,"ID","Name"); if(collection["drop"]!=null) { stringprojectID=collection["drop"]; selec=newSelectList(li,"ID","Name",projectID);//根据返回的选中项值设置选中项 ViewData["ruturned"]=collection["drop"]; } ViewData["drop"]=selec; returnView(); }
前端代码:
@using(Html.BeginForm()){
@Html.DropDownList("drop",ViewData["d"]asSelectList)
<input type="submit"value="查看对应分组列表"/>
}
<p>当前项目ID:@ViewData["ruturned"]</p>