jsTree版本:3.0.4

在ASP.NET MVC中使用jsTree

Model:

    public class Department
{
public int Id { get; set; }
public string Name { get; set; }
public int PId { get; set; }
}

数据库:

Controller:

jsTree既可以一次性把所有节点都加载到客户端,也可以只加载一层,点击节点后再去服务端获取下层节点。对于小的菜单可以一次性加载完,如果节点很多,可以按需加载(lazy loading)。

1、 一次性加载完所有节点

public JsonResult GetTreeData(int clickId = )
{
// use database
var db=new Salary.Models.EntityContext(); /* 一次性加载完所有节点.
* 前端只需配置 'data': {
'url': '/Home/GetTreeData',
'dataType': 'json'
* } 不用给服务端传值
* 服务端不需写where
*/
var items=from item in db.Department
select new
{
id = item.Id,
parent = item.PId.ToString() == "" ? "#" : item.PId.ToString(), // root必须是# !
text = item.Name
}; return Json(items, JsonRequestBehavior.AllowGet);
}

2、按需加载节点(lazy loading)

public JsonResult GetTreeData(int clickId = )
{
// use database
var db=new Salary.Models.EntityContext(); /* 异步加载节点(按需)
前端需提供id传给服务端:
'data': function (node) {
return { id: node.id };
}
后端要在linq中加where筛选
*/
var items=from item in db.Department
where item.PId == clickId // 在服务端要把所有上级节点找出来
select new // 匿名类可以添加需要的字段,比如HasChildren
{
id = item.Id,
parent = item.PId.ToString() == "" ? "#" : item.PId.ToString(), // root必须是# !
text = item.Name,
children = db.Department.Any(p => p.PId == item.Id) // true|false 是否有子项 }; return Json(items, JsonRequestBehavior.AllowGet);
}

View:

<div id="jstree">

@section scripts{
<link href="~/Content/jstree/themes/default/style.min.css" rel="stylesheet" />
<script src="~/Scripts/jstree/jstree.js"></script>
<script>
$(document).ready(function () {
$("#jstree").jstree({
"core": {
//'initially_open':["abc"],
'data': {
'url': '/Home/GetTreeData',
'dataType': 'json',
'data': function (node) { // 传给服务端点击的节点
//return { id: node.id == "#" ? "0" : node.id };
return { clickId: node.id };
},
success: function () {
//alert('ok');
}
}
}
}); // 展开节点
$("#jstree").on("loaded.jstree", function (event, data) {
// 展开所有节点
//$('#jstree').jstree('open_all');
// 展开指定节点
//data.instance.open_node(1); // 单个节点 (1 是顶层的id)
data.instance.open_node([1, 10]); // 多个节点 (展开多个几点只有在一次性装载后所有节点后才可行)
}); // 所有节点都加载完后
$("#jstree").on("ready.jstree", function (event, data) {
//alert('all ok');
data.instance.open_node(1); // 展开root节点
//// 隐藏根节点 http://stackoverflow.com/questions/10429876/how-to-hide-root-node-from-jstree
$("#1_anchor").css("visibility", "hidden");
$("li#1").css("position", "relative")
$("li#1").css("top", "-20px")
$("li#1").css("left", "-20px")
$(".jstree-last .jstree-icon").first().hide();
}); // 获得点击节点的id
$('#jstree').on("changed.jstree", function (e, data) {
console.log("The selected nodes are:");
console.log(data.selected);
alert('node.id is:' + data.node.id);
alert('node.text is:'+data.node.text);
console.log(data); // TODO: 传递给Tab
//$.ajax({
// 'url': 'Home/GetTreeData/',
// 'data': { 'id': data.node.id }
//});
});
});// end ready
</script>

根节点的父项是0,根节点只有一个,似乎显示出来也不好看:

所以我们把它隐藏起来:

PS:

ready 和loaded  的区别:
loaded.jstree: triggered after the root node is loaded for the first time
ready.jstree : triggered after all nodes are finished loading

参考:

https://github.com/vakata/jstree

https://groups.google.com/forum/#!forum/jstree

http://www.jstree.com/

http://www.codeproject.com/Questions/731612/jstree-binding-with-json-data-send-from-controller

--End--

树形菜单 jsTree 使用方法的更多相关文章

  1. jsTree树形菜单分类

    这里我演示的jsTree是基于ABP框架 ,展示部分代码,话不多说首先看效果如: 1:引入JS <link href="/jstree/themes/default/style.css ...

  2. 简单实用的二级树形菜单hovertree

    原创 hovertree是一个仿京东的树形菜单jquery插件,暂时有银色和绿色两种. 官方网址:http://keleyi.com/jq/hovertree/欢迎下载使用 查看绿色效果:http:/ ...

  3. WEB开发中前后台树形菜单的展示设计

    在WEB开发中经常需要进行树形菜单的展示,本例通过不同角度的总结了如下三种实现方式: 通过JS的递归实现前端菜单DOM的动态创建 通过JSP的include指令结合JSTL表达式语言递归实现菜单的展示 ...

  4. jQuery树形菜单(1)jquery.treeview

    jQuery的树形插件资料URL:http://bassistance.de/jquery-plugins/jquery-plugin-treeview/从该网站Download得到jquery.tr ...

  5. DWZ中Tree树形菜单的treeCheck如何获取返回值解决方案

    最近在对DWZ和asp.net MVC3进行整合,其中遇到了很多问题,总算一一解决了,今天就说说题目所示的问题解决方案. 想做一个基于角色的权限管理,要对每一个Action进行权限控制.就想用DWZ的 ...

  6. Android学习笔记之树形菜单的应用...

    PS:终于考完试了,总算是解脱了...可以正式上手项目开发了.... 学习内容: 1.掌握如何使用树形菜单...   对知识点进行一下补充...居然忘记了去学习树形菜单...不过在这里补上... Ex ...

  7. jquery easy ui 1.3.4 Tree树形菜单(9)

    9.1.创建树形菜单 <ul id="tt" class="easyui-tree"> <li><span>第一级</ ...

  8. ERP存储过程的调用和树形菜单的加载(四)

    引用:DAL:System.Data.SqlClient;System.Data; namespace CommTool { public class SqlComm { /// <summar ...

  9. jquery树形菜单完整代码

    本实例实现了树形的动态菜单,兼容IE8,火狐,Chrome等浏览器.使用了jQuery的toggle() 方法.效果和代码如下: <!DOCTYPE html PUBLIC "-//W ...

随机推荐

  1. 树莓派I2C连接18B20

    按图连接设备 载入模块 sudo modprobe w1-gpio sudo modprobe w1-therm cd /sys/bus/w1/devices/ 显示结果 ls pi@raspberr ...

  2. ffmpeg 研究

    ffmpeg -codecs | grep mp3 可以查看ffmpeg是否把mp3编解码模块编译进去了. libmp3lame is the mp3 encoder for ffmpeg. It n ...

  3. 关于MySQL数据类型timestamp的讨论

    在项目中用到了timestamp这个类型,该字段本意是用于存储改行记录的创建时间的,实际上这是一个很危险的设置: mysql官方文档上有这么一段话: The TIMESTAMP data type p ...

  4. CodeForces 548A Mike and Fax (回文,水题)

    题意:给定一个字符串,问是不是恰好存在 k 个字符串是回文串,并且一样长. 析:没什么好说的,每次截取n/k个,判断是不是回文就好. 代码如下: #include<bits/stdc++.h&g ...

  5. java 指导 (Java Tutorial)

    case1: site:docs.oracle.com -xmx -xms case2: site:docs.oracle.com thread case3: site:docs.oracle.com ...

  6. js正则验证手机号

    var regp = /^(\+86|86|)1[3458][0-9]{9}$/; if(str==""){ var flag = checkstatus(obj,"&q ...

  7. 用Rufus来制作Windows10的U盘安装盘

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用Rufus来制作Windows10的U盘安装盘.

  8. VHD_Update_mount-vhd

    ###################功能说明########################该脚本用来对离线VHD文件更新,导入系统补丁############################### ...

  9. 错误号码2003 Can&#39;t connect to MySQL server &#39;localhost&#39; (0)

    错误描写叙述 错误原因 近期,我一直都能够用SQLyog连接本地数据库,可是近几天却无法连接:而且一直都报上述错误,我查阅了非常多资料,发现有非常多中说法 总结一下 第一,MySQL中的my.ini出 ...

  10. PS-常用操作

    快捷键 设置图片的大小:ctrl+t 放大缩小:ctrl+空格+“+or-”