C#实现无限级联下拉列表框

2019-12-30 11:36:38丽君

C#拼接下拉列表框相关:


/// <summary>
    /// 递归得到它的所有祖宗以selectlist的形式进行拼接
    /// </summary>
    /// <param name="son"></param>
    /// <param name="sbr"></param>
    void getSelectList(SubItem son, StringBuilder sbr)
    {
      StringBuilder inSbr = new StringBuilder();
      if (son != null)
      {
        if (son.ParentID == 0)
          inSbr.Append("<select name='Parent' onchange = 'areaOnSelect(this)' >");
        else
          inSbr.Append("<select name='Sub'>");
        GetCommon_CategoryByLevel(son.Level).ToList().ForEach(i =>
        {
          if (i.ID == son.ID)
            inSbr.Append("<option value='" + i.ID + "' selected='true'>" + i.Name + "</option>");
          else
            inSbr.Append("<option value='" + i.ID + "'>" + i.Name + "</option>");
        });

        inSbr.Append("</select>");
        sbr.Insert(0, inSbr);
        getSelectList(son.Parent, sbr);
      }
    }

C#得到同一深度的节点(同辈节点)相关:


/// <summary>
    /// 得到指定深度的列表
    /// </summary>
    /// <param name="level"></param>
    /// <returns></returns>
    public List<SubItem> GetCommon_CategoryByLevel(int level)
    {
      var linq = from data1 in _subList
            join data2 in _subList on data1.ParentID equals data2.ID into list
            select new SubItem
            {
              ID = data1.ID,
              Level = data1.Level,
              Name = data1.Name,
              Parent = list.FirstOrDefault(),
              ParentID = data1.ParentID,
            };
      return linq.Where(i => i.Level.Equals(level)).ToList();
    }

MVC页面action相关:


public ActionResult Category(int? id)
    {
      ViewData["Parent"] = new SelectList(_subList.Where(i => i.ID == (id ?? 0)), "ID", "Name", id ?? 1);
      SubItem current = _subList.FirstOrDefault(i => i.ID == (id ?? 1));
      GetFather(current);
      StringBuilder sbr = new StringBuilder();
      getSelectList(current, sbr);
      ViewData["edit"] = sbr.ToString();//修改时,进行绑定
      return View();
    }

MVC页面代码相关:


 @Html.Raw(ViewData["edit"].ToString())

C#树型结构实体类相关:


/// <summary>
  /// 树型分类结构
  /// </summary>
  public class Category
  {
    /// <summary>
    /// 父ID
    /// </summary>
    public int ParentID { get; set; }
    /// <summary>
    /// 树ID
    /// </summary>
    public int ID { get; set; }
    /// <summary>
    /// 树名称
    /// </summary>
    public string Name { get; set; }
    /// <summary>
    /// 深度
    /// </summary>
    public int Level { get; set; }
    /// <summary>
    /// 子孙节点
    /// </summary>
    public List<Category> Sons { get; set; }
    /// <summary>
    /// 父节点
    /// </summary>
    public Category Parent { get; set; }
  }