视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
ASP.NET MVC中为DropDownListFor设置选中项的方法
2020-11-27 22:38:48 责编:小采
文档


在MVC中,当涉及到强类型编辑页,如果有select元素,需要根据当前Model的某个属性值,让Select的某项选中。本篇只整理思路,不涉及完整代码。

□ 思路

往前台视图传的类型是List<SelectListItem>,把SelectListItem选中项的Selected属性设置为true,再把该类型对象实例放到ViewBag,ViewData或Model中传递给前台视图。

  通过遍历List<SelectListItem>类型对象实例

□ 控制器

public ActionResult SomeAction(int id)
{
 //从数据库获取Domain Model
 var domainModel = ModelService.LoadEntities(m => m.ID == id).FirstOrDefault<Model>();
 
 //通过某个方法获取List<SelectListItem>类型对象实例
 List<SelectListItem> items = SomeMethod();
 
 //遍历集合,如果当前Domain model的某个属性与SelectListItem的Value属性相等,把SelectListItem的Selected属性设置为true
 foreach(SelectListItem item in items)
 {
 if(item.Value == Convert.ToString(domainModel.某属性))
 {
 item.Selected = true;
 }
 }
 
 //把List<SelectListItem>集合对象实例放到ViewData中
 ViewData["somekey"] = items;
 
 //可能涉及到把Domain Model转换成View Model
 
 return PartialView(domainModel);
}

□ 前台视图显示

@model DomainModel
@Html.DropDownListFor(m => m.SomeProperty,(List<SelectListItem>)ViewData["somekey"],"==请选择==")

通过遍历Model集合

给View Model设置一个bool类型的字段,描述是否被选中。
把Model的某些属性作为SelectListItem的Text和Value值。根据View Model中的布尔属性判断是否要把SelectListItem的Selected设置为true.

□ View Model

public class Department
{
 public int Id {get;set;}
 public string Name {get;set;}
 public bool IsSelected {get;set;}
}

□ 控制器

public ActionResult Index()
{
 SampleDbContext db = new SampleDbContext();
 List<SelectListItem> selectListItems = new List<SelectListItem>();
 
 //遍历Department的集合
 foreach(Department department in db.Departments)
 {
 SelectListItem = new SelectListItem
 {
 Text = department.Name,
 Value = department.Id.ToString(),
 Selected = department.IsSelected.HasValue ? department.IsSelected.Value : false
 }
 selectListItems.Add(selectListItem);
 }
 ViewBag.Departments = selectListItems;
 return View();
}

下面是其它网友的补充:

后台代码:

public ActionResult Index(FormCollection collection)
 {
 IList<Project> li = Utility.SqlHelper.getProjectList();
 SelectList selec = new SelectList(li, "ID", "Name");
 
 if (collection["drop"] != null)
 {
 string projectID = collection["drop"];
 selec = new SelectList(li, "ID", "Name", projectID);//根据返回的选中项值设置选中项 
 ViewData["ruturned"] = collection["drop"];
 }
 ViewData["drop"] = selec;
 return View();
 }

前端代码:

  @using (Html.BeginForm()){
@Html.DropDownList("drop", ViewData["d"] as SelectList)
    <input  type="submit" value="查看对应分组列表" />
        }
        <p> 当前项目ID: @ViewData["ruturned"]</p>

下载本文
显示全文
专题