C# 菜單之遞歸算法


今天因為菜單的問題, 需要用到遞歸算法, 在此記錄一下:

1.表結構如下:(這里只是展示兩個比較重要的字段) ,大家應該都看明白

2.先定義一個菜單結構類.

3.實現遞歸.

 private List<TreeChildViewModel>  AddChildN(string Pid)
        {
            var data = _perssionRepsonsityService.GetAllList().Where(x => x.ParentID == Pid);//這里是獲取數據
            List<TreeChildViewModel> list = new List<TreeChildViewModel>();
            foreach (var item in data)
            { 
          //這一塊主要是轉換成TreeChidViewModel的值. TreeChildViewModel childViewModel
= new TreeChildViewModel(); childViewModel.id = item.ID; childViewModel.component = item.Component; childViewModel.name = item.Name; childViewModel.meta_icon = item.Meta_icon; childViewModel.meta_title = item.Meta_title; childViewModel.meta_content = item.Meta_content; childViewModel.treeChildren = GetChildList(childViewModel); list.Add(childViewModel); } return list; } public List<TreeChildViewModel> GetChildList(TreeChildViewModel treeChildView) { if (!_perssionRepsonsityService.IsExists(x => x.ParentID == treeChildView.id)) { return null; } else { return AddChildN(treeChildView.id); } }

4.調用

public string  Client()
{
   List<TreeChildViewModel> treeViewModels = new List<TreeChildViewModel>();

   treeViewModels= AddChildN("0");  
  return  JsonConvert.SerializeObject(treeViewModels); 
}

5.結果展示

[
    {
        "id":"1",
        "pathRouter":null,
        "name":"用戶管理",
        "component":"123123",
        "meta_title":null,
        "meta_content":null,
        "meta_icon":null,
        "treeChildren":[
            {
                "id":"2",
                "pathRouter":null,
                "name":"table",
                "component":"123123",
                "meta_title":null,
                "meta_content":null,
                "meta_icon":null,
                "treeChildren":[
                    {
                        "id":"5",
                        "pathRouter":null,
                        "name":"table",
                        "component":"123123",
                        "meta_title":null,
                        "meta_content":null,
                        "meta_icon":null,
                        "treeChildren":null
                    }
                ]
            }
        ]
    },
    {
        "id":"3",
        "pathRouter":null,
        "name":"table",
        "component":"123123",
        "meta_title":null,
        "meta_content":null,
        "meta_icon":null,
        "treeChildren":[
            {
                "id":"4",
                "pathRouter":null,
                "name":"table",
                "component":"123123",
                "meta_title":null,
                "meta_content":null,
                "meta_icon":null,
                "treeChildren":null
            }
        ]
    },
    {
        "id":"6",
        "pathRouter":null,
        "name":"table",
        "component":"123123",
        "meta_title":null,
        "meta_content":null,
        "meta_icon":null,
        "treeChildren":null
    }
]

6.這里是全部菜單獲取的, 如果是根據角色來判斷權限獲取的話, 在AddChildN 的foreach 里面進行權限進行過濾, 如果該角色ID下的權限包含有相應的權限ID,則執行,否則,直接跳出循環. ,但是這最終還得根據實際表結構來進行過濾. 

 

7.總結, 其實我這差不多是誤打誤撞寫出來的,算做個記錄吧.. 

 


免責聲明!

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



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