程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> ASP.NET母版頁TreeView導航鏈接問題

ASP.NET母版頁TreeView導航鏈接問題

編輯:.NET實例教程

最近在網上找一些關於“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              &n
bsp;      {
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,比較粗糙,望高手有更好的方法可以交流一下,謝謝。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved