`
lovnet
  • 浏览: 6823971 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

AjaxPro.NET框架生成高效率的Tree(Asp.net 2.0)(示例代码下载)

阅读更多

(一). 说明

用Tree显示菜单及物品列表(从服务端获取数据)比较方便,当前显示Tree 主要有两种方式:

1. 在Tree初始化时将数据全部一次性从服务端获取,获取完数据后页面展开或收缩时就不再需要获取数据,

这样,获取完数据使用时效率比较高, 但当树节点很多时, 在每次初始化时会有较大的延迟.

2. 初始化时只加载展开的节点, 当用户需要查看某个节点下的数据时, 再去取数据, 这样, 初始化时延迟会相

对减少, 但每次单击节点时要获取数据, 页面每次都要刷新, 所以也会产生延迟.

此事例用Ajax实现第二种方式, 每次只动态加载要展开的节点数据(闭合节点不展开时,则不获取其子节点的

数据), 另外加载节点时页面不会刷新.

(二). 运行示例图

(三). AjaxPro.NET简介

首先对AjaxPro.NET作一下介绍, AjaxPro.NET是一个优秀的Ajax框架, 在实际应用中只要添加其DLL

引用并进行简单的配置,即可以非常方便的在客户端直接调用服务端方法, 来获取Tree节点.

(四).使用AjaxPro.NET预配置

1. 添加 AjaxPro.dll 文件的引用(示例代码中已经包含,直接COPY过来使用即可).

2. 在Web.config文件中添加以下配置,

1<httpHandlers>
2<addverb="POST,GET"path="ajaxpro/*.ashx"type="AjaxPro.AjaxHandlerFactory,AjaxPro"/>
3 </httpHandlers>
3. 在要使用AjaxPro.NET框架的页面 *.aspx.cs 的 Page_Load事件中加如下代码:
AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default));
4. 经过以上三步骤后, 只要在后台服务端的方法前面增加属性[AjaxMethod]后:
1[AjaxMethod()]//or[AjaxPro.AjaxMethod]
2publicArrayListGetSearchItems(stringstrQuery)
3{
4//生成数据源
5ArrayListitems=newArrayList();
6items.Add("King");
7items.Add("Rose");
8returnitems;
9}
10
就可以在客户端直接使用服务端方法, 非常方便, 客户端调用后台代码如下:
varreturnValue=后台代码类名.GetSearchItems(参数);

(五). 代码

1. 页面 Tree.aspx 代码:

1<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Tree.aspx.cs"Inherits="_Default"%>
2
3<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
5<htmlxmlns="http://www.w3.org/1999/xhtml">
6<headrunat="server">
7<title>AjaxEfficientTree</title>
8<linktype="text/css"href="css/tree.css"rel="stylesheet">
9</head>
10<body>
11<formid="form1"runat="server">
12<div>
13<asp:PanelID="Panel1"runat="server"Height="424px"Width="251px">
14<divid="CategoryTree"class="TreeMenu"></div>
15</asp:Panel>
16<scriptlanguage="jscript">
17vartree=document.getElementById("CategoryTree");
18varroot=document.createElement("li");
19root.id="li_0";
20tree.appendChild(root);
21ExpandSubCategory(0);
22functionExpandSubCategory(categoryID)
23{
24varliFather=document.getElementById("li_"+categoryID);
25if(liFather.getElementsByTagName("li").length>0)
26{
27ChangeStatus(categoryID);
28return;
29}
30liFather.className="Opened";
31SwitchNode(categoryID,true);
32
33//仅获取当前节点的子Nodes
34_Default.GetSubCategory(categoryID,GetSubCategory_callback);
35}
36functionSwitchNode(CategoryID,show)
37{
38varli_father=document.getElementById("li_"+CategoryID);
39if(show)
40{
41varul=document.createElement("ul");
42ul.id="ul_note_"+CategoryID;
43
44varnote=document.createElement("li");
45note.className="Child";
46
47varimg=document.createElement("img");
48img.className="s";
49img.src="css/s.gif";
50
51vara=document.createElement("a");
52a.href="javascript:void(0);";
53a.innerHTML="Pleasewaiting";
54
55note.appendChild(img);
56note.appendChild(a);
57ul.appendChild(note);
58li_father.appendChild(ul);
59}
60else
61{
62varul=document.getElementById("ul_note_"+CategoryID);
63if(ul)
64{
65li_father.removeChild(ul);
66}
67}
68}
69functionGetSubCategory_callback(response)
70{
71vardt=response.value.Tables[0];
72if(dt.Rows.length>0)
73{
74variCategoryID=dt.Rows[0].FatherID;
75}
76varli_father=document.getElementById("li_"+iCategoryID);
77varul=document.createElement("ul");
78for(vari=0;i<dt.Rows.length;i++)
79{
80if(dt.Rows[i].IsChild==1)
81{
82varli=document.createElement("li");
83li.className="Child";
84li.id="li_"+dt.Rows[i].CategoryID;
85varimg=document.createElement("img");
86img.id=dt.Rows[i].CategoryID;
87img.className="s";
88img.src="css/s.gif";
89vara=document.createElement("a");
90a.href="javascript:OpenDocument('"+dt.Rows[i].CategoryID+"');";
91a.innerHTML=dt.Rows[i].CategoryName;
92}
93else
94{
95varli=document.createElement("li");
96li.className="Closed";
97li.id="li_"+dt.Rows[i].CategoryID;
98varimg=document.createElement("img");
99img.id=dt.Rows[i].CategoryID;
100img.className="s";
101img.src="css/s.gif";
102img.onclick=function(){ExpandSubCategory(this.id);};
103img.alt="Expand/collapse";
104vara=document.createElement("a");
105a.href="javascript:ExpandSubCategory('"+dt.Rows[i].CategoryID+"');";
106a.innerHTML=dt.Rows[i].CategoryName;
107}
108li.appendChild(img);
109li.appendChild(a);
110ul.appendChild(li);
111}
112li_father.appendChild(ul);
113SwitchNode(iCategoryID,false);
114}
115
116//单击叶节点时,异步从服务端获取单个节点的数据.
117functionOpenDocument(CategoryID)
118{
119_Default.GetNameByCategoryID(CategoryID,GetNameByCategoryID_callback);
120}
121
122functionGetNameByCategoryID_callback(response)
123{
124alert(response.value);
125}
126
127functionChangeStatus(CategoryID)
128{
129varli_father=document.getElementById("li_"+CategoryID);
130if(li_father.className=="Closed")
131{
132li_father.className="Opened";
133}
134else
135{
136li_father.className="Closed";
137}
138}
139</script>
140</div>
141</form>
142</body>
143</html>

2. 页面后台文件 Tree.aspx.cs 代码:

1usingSystem;
2usingSystem.Data;
3usingSystem.Configuration;
4usingSystem.Web;
5usingSystem.Web.Security;
6usingSystem.Web.UI;
7usingSystem.Web.UI.WebControls;
8usingSystem.Web.UI.WebControls.WebParts;
9usingSystem.Web.UI.HtmlControls;
10
11publicpartialclass_Default:System.Web.UI.Page
12{
13//此对象用于存放所有的节点数
14publicstaticDataSetdsAllNodes=newDataSet();
15
16protectedvoidPage_Load(objectsender,EventArgse)
17{
18AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default));
19CreateNodes();
20}
21
22privateDataTableCreateStructure()
23{
24DataTabledt=newDataTable();
25dt.Columns.Add(newDataColumn("CategoryID",typeof(int)));
26dt.Columns.Add(newDataColumn("CategoryName",typeof(string)));
27dt.Columns.Add(newDataColumn("FatherID",typeof(string)));
28dt.Columns.Add(newDataColumn("IsChild",typeof(bool)));
29returndt;
30}
31publicvoidCreateNodes()
32{
33DataTabledt=this.CreateStructure();
34
35DataRowdrNew=dt.NewRow();
36drNew["CategoryID"]=1;
37drNew["CategoryName"]="物品类别";
38drNew["FatherID"]=0;
39dt.Rows.Add(drNew);
40
41drNew=dt.NewRow();
42drNew["CategoryID"]=2;
43drNew["CategoryName"]="水果";
44drNew["FatherID"]=1;
45dt.Rows.Add(drNew);
46
47drNew=dt.NewRow();
48drNew["CategoryID"]=3;
49drNew["CategoryName"]="工具";
50drNew["FatherID"]=1;
51dt.Rows.Add(drNew);
52
53drNew=dt.NewRow();
54drNew["CategoryID"]=4;
55drNew["CategoryName"]="萍果";
56drNew["FatherID"]=2;
57dt.Rows.Add(drNew);
58
59drNew=dt.NewRow();
60drNew["CategoryID"]=5;
61drNew["CategoryName"]="香蕉";
62drNew["FatherID"]=2;
63dt.Rows.Add(drNew);
64
65drNew=dt.NewRow();
66drNew["CategoryID"]=6;
67drNew["CategoryName"]="桔子";
68drNew["FatherID"]=2;
69dt.Rows.Add(drNew);
70
71drNew=dt.NewRow();
72drNew["CategoryID"]=7;
73drNew["CategoryName"]="萝卜";
74drNew["FatherID"]=2;
75dt.Rows.Add(drNew);
76
77drNew=dt.NewRow();
78drNew["CategoryID"]=8;
79drNew["CategoryName"]="钢笔";
80drNew["FatherID"]=3;
81dt.Rows.Add(drNew);
82
83drNew=dt.NewRow();
84drNew["CategoryID"]=9;
85drNew["CategoryName"]="铅笔";
86drNew["FatherID"]=3;
87dt.Rows.Add(drNew);
88
89drNew=dt.NewRow();
90drNew["CategoryID"]=10;
91drNew["CategoryName"]="尺子";
92drNew["FatherID"]=3;
93dt.Rows.Add(drNew);
94
95drNew<span s
分享到:
评论

相关推荐

    AjaxPro.NET实现TextBox智能获取服务端数据功能

    总结来说,这个示例展示了如何使用AjaxPro.NET结合JavaScript和ASP.NET后台代码,实现在TextBox中输入时实时从服务端检索数据的特性,提供用户友好的搜索或选择体验。这涉及到了异步编程、前端JavaScript交互以及...

    商业编程-源码-AjaxPro.NET实现的简单高效的Tree.zip

    这个压缩包中的内容可能包含了一个使用AjaxPro.NET框架实现的简单而高效的树形结构示例。树形结构在Web应用中常用于展现层次化数据,如组织结构、目录或文件系统。下面我们将深入探讨AjaxPro.NET以及如何利用它来...

    AjaxPro.NET实现的简单高效的Tree

    AjaxPro.NET是一个强大的ASP.NET AJAX库,它允许开发者创建高度交互性和响应性的Web...通过学习这个示例,你可以了解到如何结合ASP.NET、C#(或VB.NET)、JavaScript以及AjaxPro.NET来创建具有现代Web功能的应用程序。

    ASP.NET2.0+AjaxPro

    ASP.NET 2.0是微软推出的一种用于构建Web应用程序的框架,它是.NET Framework的一部分。该版本引入了许多新特性,旨在提高开发效率和用户体验。以下是一些关键点: 1. **控件生命周期**:ASP.NET 2.0中的控件具有更...

    AjaxPro.Net源码

    AjaxPro.Net是一个基于.NET框架的库,主要用于帮助开发者构建具有高度交互性和响应性的Web应用程序,通过使用Ajax(Asynchronous JavaScript and XML)技术。AjaxPro.dll是这个库的核心组件,提供了强大的功能,允许...

    asp.net+AjaxPro框架

    js 调用后台方法 function a1() { var s = _Default.GetServerTime().value; alert(s); } function a2() { var s = _Default.GetString("123").value; alert(s); } function a3() { ... &lt;/script&gt;

    AjaxPro.NET实现TextBox智能获取源码

    AjaxPro.NET是一个强大的ASP.NET AJAX库,它允许开发者在服务器端使用C#或VB.NET创建异步Web应用程序。AjaxPro.NET的主要目标是简化AJAX应用的开发,提供与经典ASP.NET相似的编程模型,但同时增加了无刷新更新的能力...

    asp.net2.0 +ajaxpro

    "ASP.NET2.0+AjaxPro留言本"这个压缩包中包含的源代码可能包括以下几个部分: 1. **.aspx页面**:包含HTML和服务器控件,以及使用AJAXPro调用的服务器端方法。 2. **.cs后端代码**:处理服务器端逻辑,如添加、删除...

    AjaxPro在.NET中的应用

    ### AjaxPro 在 .NET 中的应用 #### 一、Ajax 的基本概念与优势 Ajax(Asynchronous JavaScript + XML)是一种创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味...

    使用AjaxPro.Net框架实现在客户端调用服务端的方法

    此文档将使用AjaxPro.Net框架实现Ajax功能:在客户端异步调用服务端方法。AjaxPro.Net是一个优秀的.net环境下的Ajax框架,用法很简单,可以查阅相关资料,本文档是一个简单的实例讲述使用AjaxPro的几个关键点。 1、下载...

    ASP.NET2.0+AjaxPro留言本

    在这个"ASP.NET2.0+AjaxPro留言本"项目中,我们可以学到以下关键知识点: 1. **ASP.NET 2.0基础知识**:了解ASP.NET 2.0的核心组件,如页生命周期、控件事件模型、母版页(Master Pages)、配置管理、 Membership ...

    ASP.NET源码——[聊天留言]asp.net2.0 + ajaxpro开发的精简留言本.zip

    在本案例中,"ASP.NET源码——[聊天留言]asp.net2.0 + ajaxpro开发的精简留言本.zip" 提供了一个使用ASP.NET 2.0版本和AjaxPro技术实现的在线聊天和留言系统源代码。这个系统可以帮助用户了解如何在Web应用中实现...

    ASP.NET-[聊天留言]asp.net2.0+ajaxpro开发的精简留言本v1.0.zip

    在本项目"ASP.NET-[聊天留言]asp.net2.0+ajaxpro开发的精简留言本v1.0.zip"中,我们看到的是一个利用ASP.NET 2.0和AjaxPro技术实现的简单在线留言本应用。下面将详细阐述这两个关键知识点。 **ASP.NET 2.0** ASP...

    ASP.NET2.0+AjaxPro留言本_aspnetajaxpro.zip

    总的来说,"ASP.NET2.0+AjaxPro留言本"项目是一个很好的教学资源,它演示了如何利用ASP.NET 2.0和AjaxPro构建一个响应式、高性能的Web应用程序。对于初学者来说,这个项目可以帮助他们理解Ajax在ASP.NET中的应用,...

    ASP.NET-[聊天留言]ASP.NET2.0+AjaxPro留言本.zip

    在"ASP.NET-[聊天留言]ASP.NET2.0+AjaxPro留言本.zip"这个项目中,开发者利用AjaxPro实现了一个在线聊天或留言本的功能。以下是这个项目可能涉及的关键知识点: 1. **AjaxPro库的使用**:首先,你需要了解如何在ASP...

    ASP.NET2.0+AjaxPro留言本.rar

    1. **ASP.NET 2.0 页面生命周期**:在ASP.NET 2.0中,页面经历一系列的生命周期阶段,包括初始化、加载、验证、呈现和卸载等,开发者需要理解这些阶段以便在正确的时间执行代码。 2. **控件事件模型**:ASP.NET 2.0...

    [聊天留言]ASP.NET2.0+AjaxPro留言本_aspnetajaxpro(ASP.NET源码).rar

    这个源码示例是一个基于ASP.NET 2.0和AjaxPro的简单留言本应用,其主要组成部分可能包括以下几个方面: 1. **用户界面**:通常由HTML和ASP.NET控件组成,如文本框、按钮等,用于用户输入留言内容。 2. **服务器端...

    Asp.net AjaxPro实现

    AjaxPro是用于ASP.NET的一个框架,旨在简化Ajax的使用,使得服务器端的.NET方法能够直接被客户端的JavaScript调用。要使用AjaxPro,首先需要在项目中引用AjaxPro.dll库,并在web.config文件中进行相应的配置,以便于...

Global site tag (gtag.js) - Google Analytics