基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合


Posted in Javascript onAugust 11, 2016

本文支持两种方式的数据,一种为List集合,一种为json字符串。

先来介绍一下后台返回list集合(推荐使用此方法):

控制器代码如下:

public static List<TC_DictionaryInfo> DInfo = new List<TC_DictionaryInfo>();
/// <summary>
/// TreeView视图
/// </summary>
/// <returns></returns>
public ActionResult May(string TypeCode,int parentId)
{
ViewBag.TypeCode = TypeCode;
ViewBag.ParentId = parentId;
return View();
}
[HttpPost]
public ActionResult GetTreeData(string TypeCode,int parentId)
{
List<TC_DictionaryInfo> DInfo = dbll.GetModelList("TypeCode="+TypeCode);
return Json(GetChildNodes(0,new NodeModel(){}, DInfo).nodes);
}
///<summary>
/// GetChildNodes方法,此方法使用递归
/// </summary>
/// <param name="parentId"></param>
/// <returns></returns>
public NodeModel GetChildNodes(int parentId,NodeModel childnodestr,List<TC_DictionaryInfo> DInfo)
{
List<TC_DictionaryInfo> DictionaryList = DInfo.Where(e => Convert.ToInt32(e.ParentId) == parentId).ToList();
for (int i = 0; i < DictionaryList.Count; i++)
{
NodeModel NewNode = new NodeModel();
NewNode.DicId = DictionaryList[i].DicId;
NewNode.text = DictionaryList[i].DICName;
NewNode.ParentId = DictionaryList[i].ParentId;
childnodestr.nodes.Add(NewNode);
GetChildNodes(NewNode.DicId, NewNode, DInfo);
}
return childnodestr;
}

视图代码如下:

<script type="text/javascript">
var typecode = @ViewBag.TypeCode;
var parentid = @ViewBag.ParentId;
$(function() {
$.ajax({
type: 'Post',
url: '/Type/GetTreeData',
data:{
TypeCode:typecode,
ParentId:parentid,
},
//data: para,
dataType: 'json',
async: false,
success: function (data) {
var defaultData = eval(data);
//var defaultData = data;
$('#treeview4').treeview({
color: "#428bca",
data: defaultData
});
},
error: function (err) {
alert('不好意思,数据忘记带上了。。。');
}
});
</scipt>

第二种方式为后台返回json字符串这种方式(此方式为后台拼接json字符串传给前台):

不建议大家采用这种方式,比较容易出错。

public ActionResult May(string TypeCode,int parentId)
{
ViewBag.TypeCode = TypeCode;
ViewBag.ParentId = parentId;
return View();
} 
public ActionResult GetTreeData()
{
//创建jsondata对象
StringBuilder jsonData = new StringBuilder();
//拼接json字符串 开始{
jsonData.Append("[");
//调用GetChildNodes方法,默认传参试为0(0表示根节点菜单选项)
jsonData.Append(GetChildNodes(0));
//闭合Node子类数组 ]
jsonData.Append("]");
//返回json字符串
return Json(jsonData.ToString());
}
/// <summary>
/// GetChildNodes方法,此方法使用递归
/// </summary>
/// <param name = "parentId" ></ param >
/// < returns ></ returns >
public string GetChildNodes(int parentId)
{
//为DInfo赋值(DInfo承载页面所需的值(间接将值传给页面)),查询所有的数据
List<TC_DictionaryInfo> DInfo = dbll.GetModelList("");
//创建ChiidNodeStr变量
StringBuilder ChildNodeStr = new StringBuilder();
//查询符合条件的数据(ParentId=0),DictionaryList接收数据
List<TC_DictionaryInfo> DictionaryList = DInfo.Where(e => Convert.ToInt32(e.ParentId) == parentId).ToList();
//循环DictionaryList为TreeView所需数据分层级(即子类、父类等节点分开)
for (int i = 0; i < DictionaryList.Count; i++)
{
//Nodes数组开始 {
ChildNodeStr.Append("{");
//实例化NewNode
NodeModel NewNode = new NodeModel();
//分别为字段赋值
NewNode.DicId = DictionaryList[i].DicId;
NewNode.text = DictionaryList[i].DICName;
NewNode.ParentId = DictionaryList[i].ParentId;
//将要显示的字段拼接
ChildNodeStr.Append("text:'" + NewNode.text + "',");
//超链接地址(此处设置为空链接#)
ChildNodeStr.Append("href:'#parent1',");
ChildNodeStr.Append("tags:['0']");
//拼接完毕子类分层,去掉最后多余的符号(,)
string ChildNodes = GetChildNodes(NewNode.DicId).Trim(',');
//判断父类下是否有子类,如果有子类放到Nodes里,如果没有不让他显示为数组形式“[]”
if (ChildNodes != string.Empty)
{
//拼接Json字符串格式
ChildNodeStr.Append(",");
ChildNodeStr.Append("nodes:[");
ChildNodeStr.Append(ChildNodes);
ChildNodeStr.Append("]");
}
//结尾加上}, 
ChildNodeStr.Append("},");
}
//返回Json字符串,并将,去掉
return ChildNodeStr.ToString().Trim(',');
}

前台代码和上面基本一致,唯一的差别在于

var defaultData = eval(data);

因为我们后台是拼接的json字符串的缘故,我们需要将json字符串转化为json数组(网上下载的基于Bootstrap的JQuery TreeView树形控件仅仅支持json数组),我也是费了很大的劲才找到的。使用MVC+Bootstrap开发TreeView的同学要注意!!!

下面接着给大家介绍基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合

以上所述是小编给大家介绍的基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
NiftyCube——轻松实现圆角边框
Feb 20 Javascript
jQuery使用手册之二 DOM操作
Mar 24 Javascript
jquery动态导航插件dynamicNav用法实例分析
Sep 06 Javascript
javascript基于prototype实现类似OOP继承的方法
Dec 16 Javascript
Vue数据驱动模拟实现2
Jan 11 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
Feb 14 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
Feb 19 Javascript
JS自定义滚动条效果简单实现代码
Oct 27 Javascript
jQuery实现数字自动增加或者减少的动画效果示例
Dec 11 jQuery
js设计模式之代理模式及订阅发布模式实例详解
Aug 15 Javascript
layui table 获取分页 limit的方法
Sep 20 Javascript
jquery 遍历hash操作示例【基于ajax交互】
Oct 12 jQuery
jQuery的图片轮播插件PgwSlideshow使用详解
Aug 11 #Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
Aug 11 #Javascript
jQuery多个版本和其他js库冲突的解决方法
Aug 11 #Javascript
JS获取字符串实际长度(包含汉字)的简单方法
Aug 11 #Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
Aug 11 #Javascript
JavaScript性能优化总结之加载与执行
Aug 11 #Javascript
js接收并转化Java中的数组对象的方法
Aug 11 #Javascript
You might like
使用 PHPStorm 开发 Laravel
2015/03/24 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
TP5.0框架实现无限极回复功能的方法分析
2019/05/04 PHP
jQuery下通过$.browser来判断浏览器.
2011/04/05 Javascript
详解强大的jQuery选择器之基本选择器、层次选择器
2012/02/07 Javascript
TextArea设置MaxLength属性最大输入值的js代码
2012/12/21 Javascript
javascript提取URL的搜索字符串中的参数(自定义函数实现)
2013/01/22 Javascript
使用jQuery实现的网页版的个人简历(可换肤)
2013/04/19 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
jQuery实现复选框成对选择及对应取消的方法
2015/03/03 Javascript
JS作为值的函数用法示例
2016/06/20 Javascript
js实现淡入淡出轮播切换功能
2017/01/13 Javascript
浅谈Vue SSR 的 Cookies 问题
2017/11/20 Javascript
js推箱子小游戏步骤代码解析
2018/01/10 Javascript
20道JS原理题助你面试一臂之力(必看)
2019/07/22 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
python2.7无法使用pip的解决方法(安装easy_install)
2018/04/03 Python
python字符串string的内置方法实例详解
2018/05/14 Python
python xlsxwriter创建excel图表的方法
2018/06/11 Python
详解分布式任务队列Celery使用说明
2018/11/29 Python
对python中dict和json的区别详解
2018/12/18 Python
python读写csv文件的方法
2019/08/13 Python
Django中modelform组件实例用法总结
2020/02/10 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
python 两种方法删除空文件夹
2020/09/29 Python
Ubuntu16安装Python3.9的实现步骤
2020/12/15 Python
CSS3弹性布局内容对齐(justify-content)属性使用详解
2017/07/31 HTML / CSS
经典优秀个人求职信分享
2013/12/12 职场文书
机关单位人员学雷锋心得体会
2014/03/10 职场文书
安全资料员岗位职责范本
2014/06/28 职场文书
文艺有韵味的诗句(生命类、亲情类...)
2019/07/11 职场文书
JavaScript 中for/of,for/in 的详细介绍
2021/11/17 Javascript
科普 | 业余无线电知识-波段篇
2022/02/18 无线电
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers