基于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 相关文章推荐
jQuery - css() 方法示例详解
Jan 16 Javascript
Jquery对象和Dom对象的区别分析
Nov 20 Javascript
js为什么不能正确处理小数运算?
Dec 29 Javascript
jQuery隐藏和显示效果实现
Apr 06 Javascript
javascript数组遍历的方法实例分析
Sep 13 Javascript
JS实现鼠标移上去显示图片或微信二维码
Dec 14 Javascript
详解jquery validate实现表单验证 (正则表达式)
Jan 18 Javascript
详解微信JS-SDK选择图片遇到的坑
Aug 15 Javascript
vue单页应用在页面刷新时保留状态数据的方法
Sep 21 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
Apr 02 Javascript
浅谈JSON5解决了JSON的两大痛点
Dec 14 Javascript
vue/cli 配置动态代理无需重启服务的方法
May 20 Vue.js
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
解析PHP无限级分类方法及代码
2013/06/21 PHP
php采集文章中的图片获取替换到本地(实现代码)
2013/07/08 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
php中Ioc(控制反转)和Di(依赖注入)
2017/05/07 PHP
Laravel框架实现的记录SQL日志功能示例
2018/06/19 PHP
各种效果的jquery ui(接口)介绍
2008/09/17 Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
2013/04/10 Javascript
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
jQuery动画与特效详解
2015/02/01 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
jQuery实现的仿select功能代码
2015/08/19 Javascript
jquery+CSS3实现淘宝移动网页菜单效果
2015/08/31 Javascript
JavaScript开发者必备的10个Sublime Text插件
2016/02/27 Javascript
第十篇BootStrap轮播插件使用详解
2016/06/21 Javascript
jquery对象和DOM对象的相互转换详解
2016/10/18 Javascript
JS实现json的序列化和反序列化功能示例
2017/06/13 Javascript
Angular6笔记之封装http的示例代码
2018/07/27 Javascript
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
vue 设置 input 为不可以编辑的实现方法
2019/09/19 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
Python实例分享:快速查找出被挂马的文件
2014/06/08 Python
Django REST framework视图的用法
2019/01/16 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
画pytorch模型图,以及参数计算的方法
2019/08/17 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
django中的图片验证码功能
2019/09/18 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
Tensorflow之MNIST CNN实现并保存、加载模型
2020/06/17 Python
MAC平台基于Python Appium环境搭建过程图解
2020/08/13 Python
Boutique 1美国:阿联酋奢侈时尚零售商
2017/10/16 全球购物
性能测试工程师的面试题
2015/02/20 面试题
护理专业毕业生推荐信
2013/10/31 职场文书
给实习单位的感谢信
2014/02/01 职场文书
《石榴》教学反思
2014/03/02 职场文书
python实现网络五子棋
2021/04/11 Python