ASPX标签定义
1.<ext:Tree runat="server" ID="Tree1" ShowBorder="false" ShowHeader="false" AutoScroll="true"
2. EnableArrows="true" OnNodeCommand="Tree1_NodeCommand">
3.</ext:Tree>
标签定义非常简单,因为所有的逻辑都在后台实现了。
同时定义了点击树节点的事件处理OnNodeCommand="Tree1_NodeCommand",因为我们要在点击树节点时 更新中间的Grid,也即是当前JavaScript的错误列表。
树与递归
只要有树的地方就少不了递归函数,因此这段代码对于我们理解递归也很有帮助。
首先看看页面初始化代码:
01.protected void Page_Load(object sender, EventArgs e)
02.{
03. if (!IsPostBack)
04. {
05. LoadData(true);
06. }
07.}
08.#region LoadData
09.private void LoadData(bool showAllErrors)
10. {
11. btnExpandAll.OnClientClick = Tree1.GetExpandAllNodesReference();
12. btnCollapseAll.OnClientClick = Tree1.GetCollapseAllNodesReference();
13.
14. string treestr = GetFileContent("~/data/json/tree.json");
15. List<string> treePathList = new List<string>();
16. ResolveMenuTree(new JSONArray(treestr), treePathList, showAllErrors, Tree1.Nodes);
17.}
18.private string GetFileContent(string path)
19.{
20. string treestr = String.Empty;
21. using (StreamReader sr = new StreamReader(Server.MapPath(path)))
22. {
23. treestr = sr.ReadToEnd();
24. }
25. return treestr;
26.}
27.private void ResolveMenuTree(JSONArray ja, List<string> treePathList, bool showAllErrors, ExtAspNet.TreeNodeCollection nodes)
28.{
29. // TODO 递归生成树
30.}
31.private string GetTreePath(List<string> treePath)
32.{
33. string path = String.Empty;
34. foreach (string node in treePath)
35. {
36. path += node + "/";
37. }
38. return path.TrimEnd('http://www.bianceng.cn/');
39.}
我们通过Nii.JSON这个开源类库(已经包含在ExtAspNet中),来将JSON字符串转换为JSONArray对象 ,以便在递归中使用:
1.JSONArray ja = new JSONArray(treestr);