效果图:

1、view端代码实现,引入jquery、easyui 的js文件,创建树形菜单标签<ul>,如下所示:

@{ViewBag.Title = "Home Page";
}
<link href="~/Area/icon.css" rel="stylesheet" />
<link href="~/Area/easyui.css" rel="stylesheet" />
<script src="~/Scripts/jquery-3.4.1.min.js"></script>
<script src="~/Scripts/jquery.easyui.min.js"></script>
<div class="row"><h2>easy UI Tree</h2><ul id="tt" class="easyui-tree"></ul>
</div><script type="text/javascript">$(function () {$('#tt').tree({checkbox: false,url: '/Home/GetTreeJson',onClick: function (node) {alert(node.id);}});});</script>

2、后端代码 实现

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Script.Serialization;namespace WebApplication3.Controllers
{public class HomeController : Controller{public ActionResult Index(){return View();}public ActionResult About(){ViewBag.Message = "Your application description page.";return View();}public ActionResult Contact(){ViewBag.Message = "Your contact page.";return View();}//创建符合easyui树形菜单的数据结构[Serializable]public class EasyTreeData{public string id { get; set; }public string text { get; set; }public string state { get; set; }public string iconCls { get; set; }public List<EasyTreeData> children { get; set; }public EasyTreeData(){this.children = new List<EasyTreeData>();this.state = "open";}public EasyTreeData(string id, string text, string iconCls = "", string state = "open") : this(){this.id = id;this.text = text;this.state = state;this.iconCls = iconCls;}/// <summary>/// 常用构造函数/// </summary>public EasyTreeData(int id, string text, string iconCls = "", string state = "open", List<EasyTreeData> children = null): this(){this.id = id.ToString();this.text = text;this.state = state;this.iconCls = iconCls;this.children = children;}}[HttpPost]public ActionResult GetTreeJson(){//创建数据集,通常可以通过查询数据库获取数据集,这里为了更加直观直接手动创建一个数据集;DataTable dt1 = new DataTable();dt1.Columns.Add("NodeID", typeof(int));dt1.Columns.Add("NodeName", typeof(string));dt1.Columns.Add("NodePID", typeof(int));dt1.Columns.Add("IconCls", typeof(string));DataRow dr = dt1.NewRow();dr["NodeID"] = 1;dr["NodeName"] = "食品";dr["NodePID"] = -1;dr["IconCls"] = "";dt1.Rows.Add(dr);dr = dt1.NewRow();dr["NodeID"] = 2;dr["NodeName"] = "苹果";dr["NodePID"] = 1;dr["IconCls"] = "";dt1.Rows.Add(dr);dr = dt1.NewRow();dr["NodeID"] = 3;dr["NodeName"] = "香蕉";dr["NodePID"] = 1;dr["IconCls"] = "";dt1.Rows.Add(dr);dr = dt1.NewRow();dr["NodeID"] = 4;dr["NodeName"] = "李子";dr["NodePID"] = 1;dr["IconCls"] = "";dt1.Rows.Add(dr);int PID = -1;//定义树形菜单数据集合,后续将集合转换成 json 传到前端展示。List<EasyTreeData> treeList = new List<EasyTreeData>();//定义根节点,这里默认根节点 为 NodePID = -1 的为根节点,实际情况根据实际修改值即可if (PID == -1){//定义根节点数据集,查找根节点List<EasyTreeData> lists = new List<EasyTreeData>();for (int i = 0; i < dt1.Rows.Count; i++){string str = dt1.Rows[i]["NodePID"].ToString();if (Int32.Parse(dt1.Rows[i]["NodePID"].ToString()) == PID){EasyTreeData list = new EasyTreeData();list.id = dt1.Rows[i]["NodeID"].ToString();list.text = dt1.Rows[i]["NodeName"].ToString();list.state = dt1.Rows[i]["NodePID"].ToString();list.iconCls = dt1.Rows[i]["IconCls"].ToString();lists.Add(list);}}//遍历根节点获取子节点结合foreach (var info in lists){//定义子节点集合List<EasyTreeData> child = new List<EasyTreeData>();for (int i = 0; i < dt1.Rows.Count; i++){if (dt1.Rows[i]["NodePID"].ToString() == info.id){EasyTreeData clist = new EasyTreeData();clist.id = dt1.Rows[i]["NodeID"].ToString();clist.text = dt1.Rows[i]["NodeName"].ToString();clist.state = dt1.Rows[i]["NodePID"].ToString();clist.iconCls = dt1.Rows[i]["IconCls"].ToString();child.Add(clist);}}if (child.Count == 0){//递归调用子节点查询,最后一层子节点treeList.Add(new EasyTreeData(info.id, info.text, "icon-user"));}else{//递归调用子节点查询,将所有层的子节点都查询出来treeList.Add(new EasyTreeData(Int32.Parse(info.id), info.text, "icon-user", "open", GetTreeJson2(info.id)));}}}string json = ToJson(treeList);return Content(json);}private List<EasyTreeData> GetTreeJson2(string PID){DataTable dt1 = new DataTable();dt1.Columns.Add("NodeID", typeof(int));dt1.Columns.Add("NodeName", typeof(string));dt1.Columns.Add("NodePID", typeof(int));dt1.Columns.Add("IconCls", typeof(string));DataRow dr = dt1.NewRow();dr["NodeID"] = 1;dr["NodeName"] = "食品";dr["NodePID"] = -1;dr["IconCls"] = "";dt1.Rows.Add(dr);dr = dt1.NewRow();dr["NodeID"] = 2;dr["NodeName"] = "苹果";dr["NodePID"] = 1;dr["IconCls"] = "";dt1.Rows.Add(dr);dr = dt1.NewRow();dr["NodeID"] = 3;dr["NodeName"] = "香蕉";dr["NodePID"] = 1;dr["IconCls"] = "";dt1.Rows.Add(dr);dr = dt1.NewRow();dr["NodeID"] = 4;dr["NodeName"] = "李子";dr["NodePID"] = 1;dr["IconCls"] = "";dt1.Rows.Add(dr);List<EasyTreeData> treeList = new List<EasyTreeData>();List<EasyTreeData> lists = new List<EasyTreeData>();for (int i = 0; i < dt1.Rows.Count; i++){string str = dt1.Rows[i]["NodePID"].ToString();if (dt1.Rows[i]["NodePID"].ToString() == PID){EasyTreeData list = new EasyTreeData();list.id = dt1.Rows[i]["NodeID"].ToString();list.text = dt1.Rows[i]["NodeName"].ToString();list.state = dt1.Rows[i]["NodePID"].ToString();list.iconCls = dt1.Rows[i]["IconCls"].ToString();lists.Add(list);}}foreach (var info in lists){List<EasyTreeData> child = new List<EasyTreeData>();for (int i = 0; i < dt1.Rows.Count; i++){if (dt1.Rows[i]["NodePID"].ToString() == info.id){EasyTreeData clist = new EasyTreeData();clist.id = dt1.Rows[i]["NodeID"].ToString();clist.text = dt1.Rows[i]["NodeName"].ToString();clist.state = dt1.Rows[i]["NodePID"].ToString();clist.iconCls = dt1.Rows[i]["IconCls"].ToString();child.Add(clist);}}if (child.Count == 0){treeList.Add(new EasyTreeData(info.id, info.text, "icon-user"));}else{treeList.Add(new EasyTreeData(Int32.Parse(info.id), info.text, "icon-user", "closed", GetTreeJson2(info.id)));}}return treeList;}protected string ToJson(object obj){string jsonData = (new JavaScriptSerializer()).Serialize(obj);return jsonData;}}
}

通过json将树形菜单结构传递到前端,从而动态实现树形菜单创建

MVC +easyui +json 前后端交互动态生成树形菜单相关推荐

  1. easyui框架前后端交互_Vue+ElementUI+.netcore前后端分离框架开发项目实战

    点击上方"前端教程",选择"星标" 每天前端开发干货第一时间送达! 转自:我心依旧.cnblogs.com/-clouds/p/11633786.html 框架 ...

  2. easyui框架前后端交互_easyui前后端分离

    陈旧的开发模式 美工(ui工程师:出一个项目模型) 前端工程师做html页面 java工程师:将原有的html转成jsp,动态展示数据 前后端强依赖,后端必须要等前端的html做好才能套jsp.如果h ...

  3. easyui框架前后端交互_Easyui Datagrid增删改及后台交互(java)

    最近项目的特殊性可算是把我折腾得够呛,从最开始的整站JS,到现在的Liferay,且不说后台,单单前台框架就让我从Dojo到YUI又到AUI.jQuery.ExtJS,常用API翻了一遍,常见问题解决 ...

  4. 【Spring MVC】Json 前后端合并

    文章目录 一.前端 1. Jackson.jsp 二.后端 1. Controller层 2.doamin_bean类 三.实现效果 一.前端 1. Jackson.jsp <%@ page l ...

  5. echarts前后端交互数据_SpringBoot2.0实战(26)整合SpringSecurity前后端分离JSON交互...

    在前端的文章中,我们实现了使用 SpringSecurity 实现登录鉴权,并使用数据库存储用户信息,实现登录鉴权 SpringBoot2.0实战(24)整合SpringSecurity之最简登录方法 ...

  6. ajax学习----json,前后端交互,ajax

    json <script>var obj = {"name": "xiaopo","age": 18,"gender& ...

  7. JAVA中的前后端交互

    JDBC 什么是JDBC java数据库连接(Java Database Connectivity) 有什么用 利用 Java 代码, 可以操作数据库. 怎么用 注册驱动 获取数据库连接 创建 Sta ...

  8. [原创]前后端交互的方式整理

    前言 本来我只是想整理下前后端如何传输数据这种交互过程,大概流程如下: 前台使用ajax通过get/post等方式提交数据到后端 后端如何获取参数 经过业务处理后,返回前端对应的响应数据 前端接受到响 ...

  9. 写给刚入门的前端工程师的前后端交互指南

    转自原文 写给刚入门的前端工程师的前后端交互指南 作为刚接触前端的不久的童鞋,大家都会兴奋于CSS和JS所带来漂亮界面,然而,前端工程师除了UI重构外,还有非常重要的职责在正确的区域渲染出服务端的数据 ...

最新文章

  1. 谈python函数的参数处理
  2. 题目 1004: [递归]母牛的故事
  3. JZOJ5944信标
  4. cs8900a网卡驱动--寄存器
  5. Cadence 电源完整性仿真实践(二)
  6. python开发环境的安装与配置_Python开发环境的安装配置
  7. java多分支流程图_Java 流程控制 之 分支结构(条件判断)
  8. 简单c语言图形程序设计,c语言简单图形编程
  9. c语言实验上机报告,c语言上机实验报告_实验报告.doc
  10. python输入名字、输出_Python输入输出
  11. Hadoop伪分布式
  12. Datawhale来到2050!
  13. POI文件上传及使用详解
  14. 一维正态分布的最大似然估计
  15. java 16进制转int_java 16进制与int互转问题
  16. 各大热补丁方案分析和比较
  17. 超云服务器 节能清单,探秘超云R9110/R9160服务器高温节能之迷
  18. 第五章 网络 之 计算机网络基础(一)
  19. IDEA关闭当前文件改为ctrl + w
  20. 京东MySQL数据库Docker化最佳实践(附PPT)

热门文章

  1. 使用七牛云JS-SDK实现文件上传
  2. 新年送礼哪家强?盘点各大互联网公司送的新年礼盒!
  3. typescript 使用_为什么不使用TypeScript?
  4. 【记录】PCL 1.11.1+VS2019+Super4PCS复现的相关配置操作流程
  5. 南航计算机英语面试自我介绍,南航地服面试自我介绍
  6. oracleVM 配置的虚拟机文件下无法与主机SSH通信解决办法
  7. 蚂蚁金服未来智慧城市:打造新空间_·_新治理_·_新生活
  8. abaqus编写本构方程vumat_利用ABAQUS的VUMAT子程序模拟霍普金森(Hopkinson)杆试验...
  9. 指甲上“月牙” 健康“晴雨表”
  10. vue3.x显示json数据组件-vue3-json-viewer