zoukankan      html  css  js  c++  java
  • 为DropDownListFor设置选中项

    在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();
    }
  • 相关阅读:
    模拟实现bind、call、apply函数
    模拟实现ECMAScript5新增的数组方法
    HBuilder mui页面间传值的几种方式
    手机端软键盘弹出挤压页面的问题
    js获取当前时间
    原生js根据class获取元素的方法
    jquery之获取select选中的值
    原生js获取元素属性值方法
    利用javascrit获取url传递的参数
    jQuery图片预加载(延迟加载)之插件Lazy Load
  • 原文地址:https://www.cnblogs.com/darrenji/p/3597502.html
Copyright © 2011-2022 走看看