效果图
思路:
这样选择后的数据是
这样放的,用分隔符 | 把每个目录的id分割开来,然后要调用的时候在controller用splid函数获取每个id(会去除掉分隔符),然后再存储到list中,然后返回json对象与获取到的全部菜单进行对比,动态加checked属性
先是js
$(document).ready(function () {
var sssssss = document.getElementById("userid").value;//这个是用户id
//这个是获取分配权限的目录的
$.get("/get/menulist", { uid: sssssss }, function (dataother) { //找出该用户之前的权限目录
console.log(dataother); //权限目录对象json
//这个是获取全部目录的
$.get("/menu/ss", function (data) { //data是string类型的json
// alert(data);
// console.log(data);
var zNode = JSON.parse(data); //获取到全部目录json对象
// console.log(zNode);
// alert(zNode.Table[0].id);
console.log(zNode);
for (var i = 0; i < zNode.Table.length; i++) { //对比
for (var j = 0; j < dataother.total; j++) {
if (zNode.Table[i].id == dataother.rows[j])
zNode.Table[i]["checked"] = "true"; //自己加数据进去
}
}
console.log(zNode);
//console.log(zNode);
var znode = zNode.Table;
zTreeObj = $.fn.zTree.init($("#menuTree"), setting, znode);
console.log(zTreeObj);
})
})
})
权限目录json对象:
全部目录和权限目录对比后的json对象
然后是权限目录controller:
[HttpGet]
[Route("get/menulist")]
public IHttpActionResult getmenulist() {
try
{
var request = HttpContext.Current.Request;
var uid = request.QueryString["uid"]; //get的获取数据方式可以看我其他博客有写
string sql = "select menulistid from usermenu where userid='"+uid+"' ";
DataBase bs = new DataBase(); //这个类完整函数我有在其他博客贴出来
DataTable dt=bs.GetDataTable(sql);
string menulist=dt.Rows[0][0].ToString();
string[] sArray = menulist.Split('|');
string ss;
List<string> lt = new List<string>();
foreach (string i in sArray)
{
if (i != null && i != "")
{
ss = i.ToString();
lt.Add(ss);
}
}
//List<usertable> lt = datasettolist.DataSetToList<menulist>(dt, 0); //用到实体类将数据与实体类映射
var total = lt.Count; //总数
var rows = lt.Skip(0).ToList(); //分页存储到List中
return Json(new { total = total, rows = rows }); //然后才转换成Json传递
}
catch (Exception ex)
{
return Ok(ex.Message);
}
}
有不懂的可以下面留言,我很活跃的