快速业务通道

ASP.NET母版页TreeView导航链接问题

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21

最近在网上找一些关于“ASP.NET母版页TreeView导航链接问题”相关资料,很多人都碰到跟我类似的问题,于是我就抽了点时间自己调试一下这个问题了。

首先描述一下我的问题:

当把TreeView控件放到母版页时,在做页面导航链接的时候,TreeView控件的菜单状态一直保持为最初设置的状态,并不会像点击某个页面跳转后还仍然保持点击的那个状态。

最简单的方式,当然是用框架了。问题虽然很容易解决,可我还是想琢磨它一下,于是就写了个调试程序来分享一下。程序比较粗糙,能达到我想要的效果就可以了,呵呵。 于是,我去MSDN里面查找一下了关于TreeView控件的相关资料,然后再结合自己的思路,终于让我写出来了。

思路:在TreeView控件里面我只设置了两个级别(级别增加的话可能要另外再处理)。当我们点击某一个父节点的时候,把当前父节点用SESSION会话存储下来,点击子节点时判断该节点的父节点是否和SESSION的父节点一致,若是就将该父节点的子级展开,反之跳过。(最好用foreach遍历该导航菜单)

在程序当中最关键的还是要了解一下TreeView控件的SelectAction属性,这个属性会涉及到一些控件相关事件,如下所示:

1、TreeNodeSelectAction.Expand:

使节点在展开和折叠状态之间切换。相应地引发 TreeNodeExpanded 事件或 TreeNodeCollapsed 事件。

2、TreeNodeSelectAction.None:

在选定节点时不引发任何事件

3、TreeNodeSelectAction.Select:

在选定节点时引发 SelectedNodeChanged 事件

4、TreeNodeSelectAction.SelectExpand:

选择节点时引发 SelectedNodeChanged 和 TreeNodeExpanded 事件。节点只会展开,不会折叠

在我的DEMO里面我是应用了第一个和所关联的两个事件进行编写的,代码如下:

在母版页内触发以下三个事件:

母版页PageLoad事件

1 protected void Page_Load(object sender, EventArgs e)
2     {
3         if (!IsPostBack)
4         {
5             //验证当前Session中是否有节点
6             if (Session["treeNode"] != null)
7             {
8                 TreeNode parentNode = Session["treeNode"] as TreeNode;
9                 //遍历TreeView的Nodes集合
10                 foreach (TreeNode tn in this.TreeView1.Nodes)
11                 {
12                     //若循环节点的文本与当前节点的文本匹配,展开该节点;反之折叠
13                     if (tn.Text.Trim() == parentNode.Text.Trim())
14                     {
15                         tn.Expand();
16                     }
17                     else
18                     {
19                         tn.Collapse();
20                     }
21
22                 }
23             }
24         }
25     }

TreeView展开事件

1  protected void TreeView1_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
2     {   //获取当前节点
3         TreeNode currentNode = e.Node;
4         //验证当前Session中是否有节点
5         if (Session["treeNode"] != null)
6         {
7             TreeNode node = Session["treeNode"] as TreeNode;
8             //遍历TreeView的Nodes集合
9             foreach (TreeNode tn in this.TreeView1.Nodes)
10             {
11                 //若循环节点的文本与当前节点的文本不匹配,将其余节点折叠
12                 if (tn.Text.Trim() != currentNode.Text.Trim())
13                 {
14                     tn.Collapse();
15                 }
16             }
17
18
19         }
20         //存储当前节点
21         Session["treeNode"] = currentNode;
22     }

TreeView折叠事件

1  protected void TreeView1_TreeNodeCollapsed(object sender, TreeNodeEventArgs e)
2     {
3         //移除存储的节点
4         Session.Remove("treeNode");
5     }

另外,个人还有一个想法就是通过动态绑定来实现多级的菜单会更合适点,遍历节点的时候,我觉得还是用它的Value值来判断最好,而不是用文本。DEMO里面还有一个是用框架实现的,效果一样。

以上就是解决标题问题的一个简短DEMO,比较粗糙,望高手有更好的方法可以交流一下,谢谢。

本文配套源码

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号