树形菜单 jsTree 使用方法
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 使用方法的更多相关文章
- jsTree树形菜单分类
这里我演示的jsTree是基于ABP框架 ,展示部分代码,话不多说首先看效果如: 1:引入JS <link href="/jstree/themes/default/style.css ...
- 简单实用的二级树形菜单hovertree
原创 hovertree是一个仿京东的树形菜单jquery插件,暂时有银色和绿色两种. 官方网址:http://keleyi.com/jq/hovertree/欢迎下载使用 查看绿色效果:http:/ ...
- WEB开发中前后台树形菜单的展示设计
在WEB开发中经常需要进行树形菜单的展示,本例通过不同角度的总结了如下三种实现方式: 通过JS的递归实现前端菜单DOM的动态创建 通过JSP的include指令结合JSTL表达式语言递归实现菜单的展示 ...
- jQuery树形菜单(1)jquery.treeview
jQuery的树形插件资料URL:http://bassistance.de/jquery-plugins/jquery-plugin-treeview/从该网站Download得到jquery.tr ...
- DWZ中Tree树形菜单的treeCheck如何获取返回值解决方案
最近在对DWZ和asp.net MVC3进行整合,其中遇到了很多问题,总算一一解决了,今天就说说题目所示的问题解决方案. 想做一个基于角色的权限管理,要对每一个Action进行权限控制.就想用DWZ的 ...
- Android学习笔记之树形菜单的应用...
PS:终于考完试了,总算是解脱了...可以正式上手项目开发了.... 学习内容: 1.掌握如何使用树形菜单... 对知识点进行一下补充...居然忘记了去学习树形菜单...不过在这里补上... Ex ...
- jquery easy ui 1.3.4 Tree树形菜单(9)
9.1.创建树形菜单 <ul id="tt" class="easyui-tree"> <li><span>第一级</ ...
- ERP存储过程的调用和树形菜单的加载(四)
引用:DAL:System.Data.SqlClient;System.Data; namespace CommTool { public class SqlComm { /// <summar ...
- jquery树形菜单完整代码
本实例实现了树形的动态菜单,兼容IE8,火狐,Chrome等浏览器.使用了jQuery的toggle() 方法.效果和代码如下: <!DOCTYPE html PUBLIC "-//W ...
随机推荐
- BootStrap入门教程 (二) :BASE CSS(排版(Typography),表格(Table),表单(Forms),按钮(Buttons))
上讲回顾:Bootstrap的手脚架(Scaffolding)提供了固定(fixed)和流式(fluid)两种布局,它同时建立了一个宽达940px和12列的格网系统. 基于手脚架(Scaffoldin ...
- hdfs[命令] dfsadmin
Usage: java DFSAdminNote: Administrative commands can only be run as the HDFS superuser. [-report] [ ...
- Hadoop2.2.0(yarn)编译部署手册
Created on 2014-3-30URL : http://www.cnblogs.com/zhxfl/p/3633919.html @author: zhxfl Hadoop-2.2编译 ...
- Excel动态生成JSON
在最近的一个项目中,有大量的数据源来至Excel,转成JSON供前台使用.Excel数据是人工录入的,难免会有错误,所以中间会有逻辑检查.在C#中读取Excel的方式有很多,网上一搜一大堆,这里我也贴 ...
- java console ( mac osx ) 命令行编码
方法 vi ~/.bash_profile #添加新行, UTF-8表示你平台的编码方式 #例如你是GBK.GB18030的 #替换成你平台console可现实字符编码即可 export JAVA_T ...
- SqlServer修改数据库文件及日志文件存放位置
--查看当前的存放位置 select database_id,name,physical_name AS CurrentLocation,state_desc,size from sys.master ...
- pomelo windows 环境
1.先安装 Python; 通过Python 官网 http://www.python.org/getit/ 下载并安装最新版本. 然后将Python 的安装目录(如: C:\Program File ...
- 利用管道实现Shell多进程
shell中有个&,表示该程序在后台执行,其实是fork了一个子进程,跟系统调用是一样的. 在实际的操作过程中,有时需要控制后台程序的个数,毕竟启动太多的后台,会对服务的性能造成影响. 所以需 ...
- 问题-FireDAC连接Sqlite3提示“unable to open database file”
相关资料:http://www.dfwlt.com/forum.php?mod=viewthread&tid=1497&extra= 问题现象:FireDAC连接Sqlite3在开发电 ...
- Spring入门(9)-AOP初探
Spring入门(9)-AOP初探 0. 目录 什么是面向切面编程 AOP常见术语 AOP实例 参考资料 1. 什么是面向切面编程 Aspect Oriented Programming(AOP),即 ...