基于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 相关文章推荐
自写简单JS判断是否已经弹出页面
Oct 20 Javascript
原生JS可拖动弹窗效果实例代码
Nov 09 Javascript
用javascript添加控件自定义属性解析
Nov 25 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
Jul 18 Javascript
node.js中的path.extname方法使用说明
Dec 09 Javascript
javascript实现给定半径求出圆的面积
Jun 26 Javascript
js脚本分页代码分享(7种样式)
Aug 19 Javascript
JavaScript中Object.prototype.toString方法的原理
Feb 24 Javascript
AngularJS入门教程之控制器详解
Jul 27 Javascript
EditPlus中的正则表达式 实战(2)
Dec 15 Javascript
使用Node.js实现RESTful API的示例
Aug 01 Javascript
解决Vue-Router升级导致的Uncaught (in promise)问题
Aug 07 Javascript
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
其他功能
2006/10/09 PHP
三种php连接access数据库方法
2013/11/11 PHP
PHP常用数组函数介绍
2014/07/28 PHP
PHP ajax 异步执行不等待执行结果的处理方法
2015/05/27 PHP
PHP接收json 并将接收数据插入数据库的实现代码
2015/12/01 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
详解EventDispatcher事件分发组件
2016/12/25 PHP
PHP信号处理机制的操作代码讲解
2019/04/19 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
jquery中this的使用说明
2010/09/06 Javascript
用js判断页面是否加载完成实现代码
2012/12/11 Javascript
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
基于iframe实现类似于ajax的页面无刷新
2014/05/31 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
2015/11/26 Javascript
详解微信小程序 页面跳转 传递参数
2016/12/08 Javascript
Vue单文件组件基础模板小结
2017/08/10 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
发布Angular应用至生产环境的方法
2018/12/10 Javascript
前后端常见的几种鉴权方式(小结)
2019/08/04 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
[01:00:04]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第二局
2016/02/26 DOTA
python实现各进制转换的总结大全
2017/06/18 Python
Python实现繁体中文与简体中文相互转换的方法示例
2018/12/18 Python
python+mysql实现教务管理系统
2019/02/20 Python
Python面向对象之类的封装操作示例
2019/06/08 Python
使用TFRecord存取多个数据案例
2020/02/17 Python
澳大利亚制造的羊皮靴:Original UGG Boots
2017/11/13 全球购物
大学生个人推荐信范文
2013/11/25 职场文书
教师专业自荐书范文
2014/02/10 职场文书
酒店餐厅2014重阳节活动策划方案
2014/09/16 职场文书
2014办公室年度工作总结
2014/12/09 职场文书
幼儿园个人总结
2015/02/28 职场文书
我去timi了,一起去timi是什么意思?
2022/04/13 杂记
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
2022/08/05 Vue.js