首页 / 网页编程 / ASP.NET / ASP.NET母版页TreeView导航链接问题
ASP.NET母版页TreeView导航链接问题2011-03-19 博客园 艾新最近在网上找一些关于“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 }