C#無限極分類菜單方法


話不多說直接上代碼

我利用的是MVC5+EF做的。

以下這部分是controller代碼。


public JsonResult Test() { List<Category> Categorylist = GetAllCategorys(); Category root = db.Categorys.Find(1); LoopToAppendChildren(root); return Json(root.ChildCategory, JsonRequestBehavior.AllowGet); } public void LoopToAppendChildren(Category curItem) { var subItems = GetCategorys(curItem.ID); curItem.ChildCategory = new List<Category>(); curItem.ChildCategory.AddRange(subItems); foreach (var subItem in subItems) { LoopToAppendChildren(all, subItem); } } public List<Category> GetCategorys(int ParentID) { var categorys = from s in db.Categorys orderby s.ID descending where s.CategoryParentID == ParentID select s; return categorys.ToList(); } public List<Category> GetAllCategorys() { var categorys = from s in db.Categorys orderby s.ID descending select s; return categorys.ToList(); }

 這部分是Category類代碼

 public class Category
    {
        public int ID { get; set; }
        public string CategoryName { get; set; }
        public string CategoryInfo { get; set; }
        public int CategoryParentID { get; set; }
        public bool CategoryStatus { get; set; }
        public int CategorySort { get; set; }
        public List<Category> ChildCategory { get; set; }
    }

 

主要就是這兩個文件,此部分可以用於bootstrap treeview的使用,和面包屑導航欄的使用。

 

//通用 ParentId,Id,children 用了反射效率不高,沒測試

public void LoopToAppendChildren<T>(List<T> all, T curItem, string parentIdName = "ParentId", string idName = "Id", string childrenName = "children")
{
  var subItems = all.Where(ee => ee.GetType().GetProperty(parentIdName).GetValue(ee, null).ToString() == curItem.GetType().GetProperty(idName).GetValue(curItem, null).ToString()).ToList(); //新聞1

  curItem.GetType().GetField(childrenName).SetValue(curItem, subItems);
  foreach (var subItem in subItems)
  {
    LoopToAppendChildren(all, subItem);//新聞1.1
  }
 }

 

參考文章:http://www.cnblogs.com/xuejianxiyang/p/5027280.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM