C\#무한 연결 드 롭 다운 목록 상자 실현

본 논문 의 사례 는 무한 직렬 드 롭 다운 목록 상자 의 실현 방법 을 공유 하 였 으 며,구체 적 인 내용 은 다음 과 같다.
트 리 구조의 표 가 있 을 수 있 습 니 다.ID,Name,ParentID,Level 등 필드 가 있 을 수 있 습 니 다.다음 에 실현 할 것 은 1 급 노드 부터 1 급 으로 열 을 내 고
드 롭 다운 목록 상자 의 형식 은 N 급 연동 과 같 습 니 다.
효과 그림:

두 문제:
1.작업 할 때의 연동 을 만 들 때 자동 바 인 딩 을 할 필요 가 없습니다.
2.작업 을 편집 할 때의 연락 운송 은 하위 노드 에 따라 한 단계 씩 부모 노드 에 연결 되 어야 합 니 다.
실현:
JS 코드

<script type="text/javascript">
  function areaOnSelect(obj) {
    var res = '';
    $.ajax({ url: '@Url.Action("GetSubTree")',
      type: 'GET',
      data: { parentId: obj.value },
      success: function (msg) {
        $(obj).nextAll().remove();
        res = "<select name='Sub' onchange='areaOnSelect(this)'>";
        res += "<option value=''>   </option>";
        $.each(msg, function (i, item) {
          res += "<option value='" + item["ID"] + "'>" + item["Name"] + "</option>";
        });
        res += "</select>";
        if ($(res).find("option").size() > 1)
          $(obj).after(res);
      }
    });
  }
</script>
C\#코드:

#region       
    /// <summary>
    ///       
    /// </summary>
    /// <param name="father"></param>
    void GetFather(SubItem father)
    {
      if (father != null)
      {
        father.Parent = _subList.FirstOrDefault(i => i.ID == father.ParentID);
        GetFather(father.Parent);
      }
    }

    /// <summary>
    ///      
    /// </summary>
    /// <param name="father">   </param>
    void getSons(SubItem father)
    {
      if (father != null)
      {
        father.Sons = _subList.Where(item =>
          item.ParentID.Equals(father.ID)).ToList();
        father.Sons.ForEach(item =>
        {
          item.Parent = father;
          getSons(item);
        });
      }
    }


    #endregion
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 페이지 액 션 관련:

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; }
  }
자,이제 우리 N 급 무한 드 롭 다운 목록 상자 가 완성 되 었 습 니 다.읽 어 주 셔 서 감사합니다.

좋은 웹페이지 즐겨찾기