前端應該有很多控件可以遞歸菜單表數據 但是自己在後端也可以把數據封裝成樹形結構的數據
數據結構
public class T_ADC_Permission : BaseModel
{
public string Id { get; set; }
public string Code { get; set; }
public string Name { get; set; }
public string ParentId { get; set; }
public bool IsAuthorize { get; set; }
public string Descript { get; set; }
public string Remark { get; set; }
public string Remark2 { get; set; }
public bool IsDelete { get; set; }
public byte[] Version { get; set; }
/// <summary>
/// 0:菜單級 , 1:按鈕級
/// </summary>
public int Type { get; set; }
/// <summary>
/// 子權限
/// </summary>
public virtual List<T_ADC_Permission> SonPermissions{get;set;}
}
封裝
public List<T_ADC_Permission> ShowPermissionsListWithTree(bool isMenu)
{
using (SqlConnection con = BaseDAL.ConnectionFactory())
{
string sql = @"select * from T_ADC_Permission";
if (isMenu)
sql += " where Type=0 ";
List<T_ADC_Permission> list = con.Query<T_ADC_Permission>(sql).ToList();
List<T_ADC_Permission> result = new List<T_ADC_Permission>();
result.AddRange(list.Where(p => p.ParentId.Equals("-1")).ToList());
foreach (var el in result)
{
AddPermission(list, el);
}
return result;
}
}
/// <summary>
/// 從某個根節點遞歸出其下所有子節點
/// </summary>
/// <param name="list">所有權限</param>
/// <param name="curPermission">當前權限</param>
public void AddPermission(List<T_ADC_Permission> list, T_ADC_Permission curPermission)
{
List<T_ADC_Permission> sonPermissions = list.Where(p => p.ParentId.Equals(curPermission.Id)).ToList();
curPermission.SonPermissions = sonPermissions;
foreach (var p in sonPermissions)
{
AddPermission(list, p);
}
}