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. 开源软交换系统 FreeSwitch 与 Asterisk 比较

    Asterisk 与freeswitch都是流行的开源软交换服务器,Asterisk出现的比较早,大概在1999年开始此项目,应该是最流行的开源软交换服务器,整个社区上下游都已经很成熟. freesw ...

  2. java的math常用方法

    鉴于java求整时欲生欲死,整理常用math如下: 1: java取整 a:floor向下取整 用法:Math.floor(num) Math.floor(1.9)//1               ...

  3. SpringMVC+Spring+Hibernate+Maven+mysql整合

    一.准备工作 1.工具:jdk1.7.0_80(64)+tomcat7.0.68+myeclipse10.6+mysql-5.5.48-win322. 开发环境安装配置.Maven项目创建(参考:ht ...

  4. JSP学习初体验

    JSP简介: 1)JSP--Java Server Pages 2)拥有servlet的特性与优点(本身就是一个servlet) 3)直接在HEML中内嵌JSP代码 4)JSP程序由JSP Engin ...

  5. Linux实战教学笔记08:Linux 文件的属性(下半部分)

    第八节 Linux 文件的属性(下半部分) 标签(空格分隔): Linux教学笔记 ---更多相关资料请点我查看 第1章 链接的概念 在linux系统中,链接可分为两种:一种为硬链接(Hard Lin ...

  6. java.util.Arrays的使用

    在Java.util包中有一个工具类Arrays类,封装了一些操作数组的方法.简单使用如下: package com.arrays.test; import java.util.Arrays; pub ...

  7. velocity 快速入门

    基本语法      1.变量定义 : $name 注意 : a.名字和$配合一起用  b.更规范的写法是 ${name} 2.赋值 : #set($name = "威少") 3.条 ...

  8. Java:浅谈InputStream的close方法

    原则:最好在任何时候使用InputStream或者OutputStream的时候,在finally中调用close()方法,显式关闭. 一个典型的示例 InputStream in = null; t ...

  9. Unity中关于等待的函数

    public void InvokeRepating(string methodName,float time,float repeatRate); 语法 注: 1.methodeName为调用的方法 ...

  10. Flex友好提示、警告

    Flex 自带的Alert带给用户的体验并不好,对于一些简单的提示来说,这个小题大作了. <?xml version="1.0" encoding="utf-8&q ...