通过C#MVC和layui2.8.11自带的treetable传的数据格式问题

最近在研究layui插件,需要用到treetable树形数据表格,查看了一下官方文档和示列
layui文档地址:https://layui.dev/docs/2.8/treeTable/
gitee地址:https://gitee.com/layui/layui
这是官方的示列代码,只需引用layui.js,在script中实例化一下treetable就可以使用了

layui.use(function(){
  var treeTable = layui.treeTable;
  var layer = layui.layer;
  var dropdown = layui.dropdown;
  // 渲染
  var inst = treeTable.render({
    elem: '#ID-treeTable-demo',
    url: '/static/2.8/json/treeTable/demo-1.json', // 此处为静态模拟数据,实际使用时需换成真实接口
    tree: {
      /*
      // 异步加载子节点
      async: {
        enable: true,
        url: '/static/2.8/json/treeTable/demo-async.json', // 此处为静态模拟数据,实际使用时需换成真实接口
        autoParam: ["parentId=id"]
      }
      */
    },
    maxHeight: '501px',
    toolbar: '#TPL-treeTable-demo',
    cols: [[
      {type: 'checkbox', fixed: 'left'},
      {field: 'id', title: 'ID', width: 80, sort: true, fixed: 'left'},
      {field: 'name', title: '用户名', width: 180, fixed: 'left'},
      {field: 'experience', title: '积分', width: 90, sort: true},
      {field: 'sex', title: '性别', width: 80, sort: true},
      {field: 'score', title: '评分', width: 80, sort: true},
      {field: 'city', title: '城市'},
      { fixed: "right", title: "操作", width: 181, align: "center", toolbar: "#TPL-treeTable-demo-tools"} 
    ]],
    page: true
  });

因为查看了一下先前第三方的treetable的使用方法,返回的数据只需要标注ID和parentid就行,然后我就试了一下官方的可不可以,发现不行,于是看了一下demo-1.json这个文件
在这里插入图片描述
可以看到需要的数据格式是这样的,于是我就把取过来的list进行了拼接试一试,开始的代码是这样的:

public ActionResult getModule(int limit, int page)
        {
            List<SysModuleModel> list = bll.getModule();
            List<SysModuleModel> list2 = new List<SysModuleModel>();
            //list2 = list.OrderBy(a => a.ID).Skip(limit * (page - 1)).Take(limit).ToList();
            list2 = list.Where(a => a.PARENTID == "0").Skip(limit * (page - 1)).Take(limit).ToList();
            string str = "[";
            for (int i = 0; i < list2.Count; i++)
            {
                str += "{";
                str += "\"ID\":";
                str += "\"" + list2[i].ID + "\",";
                str += "\"MODULEID\":";
                str += "\"" + list2[i].MODULEID + "\",";
                str += "\"MODULENAME\":";
                str += "\"" + list2[i].MODULENAME + "\",";
                str += "\"MODULEDESCRIPTION\":";
                str += "\"" + list2[i].MODULEDESCRIPTION + "\",";
                str += "\"MODULEURL\":";
                str += "\"" + list2[i].MODULEURL + "\",";
                str += "\"MENUICON\":";
                str += "\"" + list2[i].MENUICON + "\",";
                str += "\"ORDERNO\":";
                str += "\"" + list2[i].ORDERNO + "\",";
                str += "\"USERCREATED\":";
                str += "\"" + list2[i].USERCREATED + "\",";
                str += "\"TIMECREATED\":";
                str += "\"" + list2[i].TIMECREATED + "\",";
                str += "\"PARENTID\":";
                str += "\"" + list2[i].PARENTID + "\",";
                List<SysModuleModel> list3 = list.Where(u => u.PARENTID == list2[i].MODULEID).ToList();
                str += "\"children\":[";
                if (list3.Count > 0)
                {
                    string str2 = "";
                    for (int j = 0; j < list3.Count; j++)
                    {
                        str2 += "{";
                        str2 += "\"ID\":";
                        str2 += "\"" + list3[j].ID + "\",";
                        str2 += "\"MODULEID\":";
                        str2 += "\"" + list3[j].MODULEID + "\",";
                        str2 += "\"MODULENAME\":";
                        str2 += "\"" + list3[j].MODULENAME + "\",";
                        str2 += "\"MODULEDESCRIPTION\":";
                        str2 += "\"" + list3[j].MODULEDESCRIPTION + "\",";
                        str2 += "\"MODULEURL\":";
                        str2 += "\"" + list3[j].MODULEURL + "\",";
                        str2 += "\"MENUICON\":";
                        str2 += "\"" + list3[j].MENUICON + "\",";
                        str2 += "\"ORDERNO\":";
                        str2 += "\"" + list3[j].ORDERNO + "\",";
                        str2 += "\"USERCREATED\":";
                        str2 += "\"" + list3[j].USERCREATED + "\",";
                        str2 += "\"TIMECREATED\":";
                        str2 += "\"" + list3[j].TIMECREATED + "\",";
                        str2 += "\"PARENTID\":";
                        str2 += "\"" + list3[j].PARENTID + "\",";
                        str2 += "\"children\":[],";
                        //str2 += "},";
                        str2 += "\"isParent\":false},";
                    }

                    str += str2.Substring(0, str2.Length - 1).ToString() + "],";
                    //str += "},";
                    str += "\"isParent\":true},";
                }
                else
                {
                    str += "],";
                    //str += "},";
                    str += "\"isParent\":false}";
                }

            }
            string str3 = str.Substring(0, str.Length - 1).ToString() + "]";
            var result = new
            {
                code = 0,
                msg = "",
                count = list.Count(),
                data = JsonConvert.DeserializeObject(str3)
            };
            return Json(result, JsonRequestBehavior.AllowGet);
        }

发现运行于以后,treetable一直正处于转圈圈的状态,然后我alert()了一下返回的数据,发现data后面是[{},{}]这样的数据,就是MVC的json化无法识别反序列化后的数据于是我查找了类似问题,具体参考:
https://blog.csdn.net/qq_35077107/article/details/104271365该作者的博客
新代码如下:

public ActionResult getModule(int limit, int page)
        {
            List<SysModuleModel> list = bll.getModule();
            List<SysModuleModel> list2 = new List<SysModuleModel>();
            list2 = list.Where(a => a.PARENTID == "0").Skip(limit * (page - 1)).Take(limit).ToList();
            string str = "[";
            for (int i = 0; i < list2.Count; i++)
            {
                str += "{";
                str += "\"ID\":";
                str += "\"" + list2[i].ID + "\",";
                str += "\"MODULEID\":";
                str += "\"" + list2[i].MODULEID + "\",";
                str += "\"MODULENAME\":";
                str += "\"" + list2[i].MODULENAME + "\",";
                str += "\"MODULEDESCRIPTION\":";
                str += "\"" + list2[i].MODULEDESCRIPTION + "\",";
                str += "\"MODULEURL\":";
                str += "\"" + list2[i].MODULEURL + "\",";
                str += "\"MENUICON\":";
                str += "\"" + list2[i].MENUICON + "\",";
                str += "\"ORDERNO\":";
                str += "\"" + list2[i].ORDERNO + "\",";
                str += "\"USERCREATED\":";
                str += "\"" + list2[i].USERCREATED + "\",";
                str += "\"TIMECREATED\":";
                str += "\"" + list2[i].TIMECREATED + "\",";
                str += "\"PARENTID\":";
                str += "\"" + list2[i].PARENTID + "\",";
                List<SysModuleModel> list3 = list.Where(u => u.PARENTID == list2[i].MODULEID).ToList();
                str += "\"children\":[";
                if (list3.Count > 0)
                {
                    string str2 = "";
                    for (int j = 0; j < list3.Count; j++)
                    {
                        str2 += "{";
                        str2 += "\"ID\":";
                        str2 += "\"" + list3[j].ID + "\",";
                        str2 += "\"MODULEID\":";
                        str2 += "\"" + list3[j].MODULEID + "\",";
                        str2 += "\"MODULENAME\":";
                        str2 += "\"" + list3[j].MODULENAME + "\",";
                        str2 += "\"MODULEDESCRIPTION\":";
                        str2 += "\"" + list3[j].MODULEDESCRIPTION + "\",";
                        str2 += "\"MODULEURL\":";
                        str2 += "\"" + list3[j].MODULEURL + "\",";
                        str2 += "\"MENUICON\":";
                        str2 += "\"" + list3[j].MENUICON + "\",";
                        str2 += "\"ORDERNO\":";
                        str2 += "\"" + list3[j].ORDERNO + "\",";
                        str2 += "\"USERCREATED\":";
                        str2 += "\"" + list3[j].USERCREATED + "\",";
                        str2 += "\"TIMECREATED\":";
                        str2 += "\"" + list3[j].TIMECREATED + "\",";
                        str2 += "\"PARENTID\":";
                        str2 += "\"" + list3[j].PARENTID + "\",";
                        str2 += "\"children\":[],";
                        //str2 += "},";
                        str2 += "\"isParent\":false},";
                    }

                    str += str2.Substring(0, str2.Length - 1).ToString() + "],";
                    str += "\"isParent\":true},";
                }
                else
                {
                    str += "],";
                    str += "\"isParent\":false}";
                }

            }
            string str3 = str.Substring(0, str.Length - 1).ToString() + "]";
            List<SysModuleModel> list4 = JsonConvert.DeserializeObject<List<SysModuleModel>>(str3);
            var result = new
            {
                code = 0,
                msg = "",
                count = list.Count(),
                data = list4
            };
            return Json(result, JsonRequestBehavior.AllowGet);
        }

前端代码如下:

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_LayoutMaster.cshtml";
}
<div class="layui-inline" id="searchKeywordf" style="margin-left:5px">
    <input type="text" autocomplete="off" id="keyword" placeholder="关键字..." class="layui-input">
</div>
<button id="query" type="button" class="layui-btn layui-btn-sm layui-btn-normal"><i class="layui-icon layui-icon-search"></i>查询</button>
<button id="add" type="button" class="layui-btn layui-btn-sm"><i class="layui-icon layui-icon-addition"></i>新增</button>

<table id="ModuleTable" lay-filter="ModuleTable" class="layui-hide"></table>

<script type="text/html" id="tool">
    <button class="layui-btn layui-btn-sm layui-btn-normal" lay-event="detail"><i class="layui-icon layui-icon-edit"></i>详情</button>
    <button class="layui-btn layui-btn-sm layui-btn-danger" lay-event="edit"><i class="layui-icon layui-icon-delete"></i>编辑</button>
</script>
@section Scripts{
<script>
    layui.use(['layer', 'form', 'treeTable','table'], function () {
        var table = layui.table;
        var layer = layui.layer;
        var treeTable = layui.treeTable;
        var util = layui.util;

       // 渲染
        treeTable.render({
                elem:'#ModuleTable',
                url: '/Module/getModule',
                height: 'full-210',
                toolbar:true,
                defaultToolbar: ['filter', 'print', 'exports'],
                page: true,
                tree: {
                    customName: {
                        isParent:"isParent",//自定义「子节点集合」的属性名
                        children:"children",//自定义「是否属于父节点」的属性名
                        name: "MODULENAME", // 节点数据保存节点名称的属性名称
                        id: "MODULEID", // 唯一标识的属性名称
                        pid: "PARENTID", // 父节点唯一标识的属性名称
                        icon: "MENUICON" // 图标的属性名称
                    }
            },
            done: function (res) {
                    treeTable.expandAll('ModuleTable', true);
                },
                cols:[[
                    { field: 'ID', title: '序号', width: 80, templet: function (obj) { return obj.LAY_INDEX; } },
                    { field: 'MODULEID', title: '菜单代码'},
                    { field: 'MODULENAME', title: '菜单名称'},
                    { field: 'MODULEDESCRIPTION', title: '描述'},
                    { field: 'MODULEURL', title: '菜单路由'},
                    { field: 'MENUICON', title: '图标', align: 'center', templet: '<div><i class="layui-icon {{d.MENUICON}}"></i></div>' },
                    { field: 'ORDERNO', title: '顺序号', align: 'center'},
                    { field: 'USERCREATED', title: '创建人', align: 'center' },
                    { field: 'TIMECREATED', title: '创建时间', align: 'center', templet: function (d) { var time = parseInt(d.TIMECREATED.toString().replace("/Date(", "").replace(")/", "")); return util.toDateString(time, 'yyyy-MM-dd HH:mm:ss') } },
                    { field: 'PARENTID', title: '父ID'},
                    { toolbar: '#tool', align: 'center', title: '操作' }
                ]]
        });
    });


    </script>
    }

这是Mdoel:

 public class SysModuleModel
    {
        public string ID { get; set; }
        public string MODULEID { get; set; }
        public string MODULENAME { get; set; }
        public string MODULEDESCRIPTION { get; set; }
        public string MODULEURL { get; set; }
        public string MENUICON { get; set; }
        public string ORDERNO { get; set; }
        public string USERCREATED { get; set; }
        public DateTime TIMECREATED { get; set; }
        public string PARENTID { get; set; }
        public List<SysModuleModel> children { get; set; }
        public bool isParent { get; set; }
    }

最后结果如下图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值