### ASP.NET AJAX 无限级 JS 树形菜单 #### 知识点概述 本文将详细介绍如何使用 ASP.NET AJAX 结合 JavaScript 实现一个无限级的树形菜单。此类型的菜单广泛应用于各类网站及应用中,特别是在那些需要展示层级结构数据的场景下。通过本教程的学习,你将能够理解并实现一个动态加载、无限级嵌套的树形菜单。 #### 重要概念解析 1. **ASP.NET AJAX**:ASP.NET AJAX 是 Microsoft 提供的一组用于创建动态网页的技术。它包括服务器端控件和客户端 JavaScript 库,能够帮助开发者轻松地构建响应式的 Web 应用程序。 2. **无限级 JS 树形菜单**:指一种能够根据数据源自动生成多级(不限于两级)的树形结构菜单。这种菜单通常用于导航栏、文件系统等地方,用户可以通过点击来展开或折叠子节点。 3. **JSON 数据格式**:JavaScript Object Notation,是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在本例中,JSON 将作为服务器与客户端之间传输数据的主要格式。 #### 技术实现细节 1. **前端页面 Tree.html** - **HTML 结构**:页面使用了标准的 HTML5 结构,并引入了必要的外部 JavaScript 文件(`dtree.js` 和 `jquery-1.4.1.js`),以便实现树形菜单的功能。 - **JavaScript 代码**: - 初始化树对象 `d`,使用 `dTree` 类。 - 定义 `getData` 函数,该函数通过 AJAX 调用服务器端方法 `GetTreeData.aspx` 来获取树形菜单的数据,并将其解析为 JSON 格式。 - 使用 jQuery 的 `each` 方法遍历 JSON 对象中的每个元素,并利用 `dTree` 的 `add` 方法添加到树形菜单中。 - 调用 `d.toString()` 方法将树形结构转换为 HTML 格式,并显示在页面上。 2. **服务器端代码 GetTreeData.aspx.cs** - 该页面主要负责处理客户端发送过来的请求,并返回相应的 JSON 数据。 - 在 `Page_Load` 事件中,通过条件判断 `!IsPostBack` 来确保只有在初次加载页面时才执行后续逻辑。 - `GetMenuByParentID` 方法用于根据传入的父节点 ID (`ParentID`) 获取所有子节点的信息,并返回 JSON 格式的数据。 #### 代码详解 1. **前端页面 Tree.html** - `<script>` 标签中定义了 `dTree` 对象实例 `d`,并初始化了一个根节点。 - `getData` 函数通过 AJAX 向服务器端发起 POST 请求,获取指定父节点下的所有子节点数据。 - 成功获取数据后,使用 `eval` 方法将字符串转换为 JSON 对象,并遍历这些对象添加到树形菜单中。 - `$(getData(0));` 表示页面加载完成后立即调用 `getData` 函数,传入初始父节点 ID 为 0。 2. **服务器端代码 GetTreeData.aspx.cs** - 通过 `SqlHelper` 类(未给出具体实现,但可以假设是一个用于数据库操作的辅助类)来实现数据的获取。 - `GetMenuByParentID` 方法根据传入的 `ParentID` 查询数据库,获取所有子节点的数据,并最终返回 JSON 格式的数据。 #### 总结 通过以上介绍,我们可以看到 ASP.NET AJAX 结合 JavaScript 可以非常灵活地实现复杂的前端功能,如本例中的无限级树形菜单。这种技术的应用不仅提高了用户体验,同时也让开发者能够更加专注于业务逻辑的实现。希望本文对你有所帮助,能够在实际项目开发中得到应用。
























之前一篇参见:
ASP.NET JS+Sql无限级树型菜单
上一篇是在后台实现的,这次改造为AJAX实现,注意先看一下其中的dTree的API。
功能说明:
由Tree.html中的JQuery AJAX代码发起HTTP请求到GetTreeData.aspx获取JSON格式的字符串,然后在Tree.html中将字符串格式化为JSON格式,用dTree函数递归构造JS Tree。
步骤:
1)创建Menu类(为了构造List<T>泛型集合)
2)创建FormatToJson类
3)创建GetTreeData.aspx窗体,添加后台实现代码
4)创建Tree.html,并处理数据递归绑定Tree
1、Tree.html
<!--Tree.html-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript" src="Scripts/dtree.js"></script>
<script type="text/javascript">
d = new dTree('d');
d.add(0, -1, '模块列表');
function getData(id) {
$.ajax({
url: 'TreeSource/GetTreeData.aspx?parentID=' + id,
type: 'post',
datatype: 'json',
success: function (returnJsonValue) {
if (returnJsonValue.length > 0) {
//格式化为JSON数据格式
var json = eval("(" + returnJsonValue + ")");
//document.write(json.Menu[0].MenuName);
//遍历集合,添加树节点
$.each(json.Menu, function (key, value) {
if (id == 0) {
d.add(value.ID, value.ParentMenuID, value.MenuName, value.MenuClickURL, value.MenuName, 'mainFrame', 'images/Tree/folder.gif', 'images/Tree/folderopen.gif');
}
else {
d.add(value.ID, value.ParentMenuID, value.MenuName, value.MenuClickURL, value.MenuName, 'mainFrame');
}
//根据模块的ParentID递归绑定数据
getData(value.ID);
})
}
else {
$("#divTree").html(d.toString());
//数据请求完毕,隐藏图片
$("#imgLoading").hide();
剩余17页未读,继续阅读

- shuyouxyz2015-05-13挺不错,不是我想要的那种
- angelshuimo2012-11-15挺详细的,还不错,不过不是我想要的

- 粉丝: 23
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 多媒体技术在高职计算机教学中的问题及其对策探讨.docx
- 新技术领域-区块链数字资产支付.docx
- 单片机电子闹钟设计方案.doc
- 计算机操作系统.ppt
- 全国计算机三级《数据库技术》模拟试题.doc
- 基于翻转课堂的计算机应用基础教学改革浅析.docx
- 情境探究教学建构深度学习的实践探索.docx
- 单片机的家用加湿器控制装置研究与设计开发.doc
- 人工智能翻译应用前景分析.docx
- 万能铣床电气及PLC控制系统设计.doc
- 基于单片机的数字温度计方案设计书(附代码及仿真).doc
- 面向监控应用的嵌入式网络技术研究.doc
- 财务软件方案.docx
- 《软件无线电数字调制解调技术研究》开题报告和任务书.doc
- 综合布线类项目施工图解.doc
- WEB方式的无线仓储管理解决实施方案.doc


