動態修改SiteMapPath路徑

http://www.purecs.net/Threads/t376.aspx
在網頁上放置一個SiteMapPath可以提供使用者一個清楚的瀏覽路標指示,如果你的SiteMap是靜態不會變動的倒是很簡單,只要編寫好一個XML檔放上去,其它的事就可以不用管了,但是在動態網頁中SiteMap的路徑可能會隨著不同的情況而有所更動,這時預先建立的靜態SiteMap似乎就不怎麼好用了,因為你無法事先去預測SiteMap該有哪些路徑(就像現在這個論壇上面的SiteMap),這個時後你必需要用程式動態控制SiteMapPath中Node的連結路徑及顯示的文字,現在只要跟著下面的步驟做就可以簡單的做到這個功能。

1. 先在Web Form中建立一個ModifyPath方法
1 private SiteMapNode ModifyPath(Object sender, SiteMapResolveEventArgs e)  
看不清楚 | 列印 | 複製

2. 在Page_Load 中註冊SiteMapResolve事件給ModifyPath方法
1 SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(this.ModifyPath);  
看不清楚 | 列印 | 複製

3. 最後在ModifyPath中撰寫動態路徑及所顯示的文字程式碼即可
1 private SiteMapNode ModifyPath(object sender, SiteMapResolveEventArgs e)  
2 {  
3     SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true);  
4     SiteMapNode modifyNode = currentNode;  
5  
6     modifyNode.Url = "http://www.bbb.net";  
7     modifyNode.Title = "bbb";  
8  
9     if ( (modifyNode = modifyNode.ParentNode) != null)  
10     {  
11         modifyNode.Url = "http://www.aaa.net";  
12         modifyNode.Title = "aaa";  
13     }  
14  
15     return currentNode;  
16 }  
看不清楚 | 列印 | 複製

好了,你現在應該可以看到一點點成果,至少SiteMapPath中的結點能被程式控制了,剩下的只需要寫出ModifyPath中真正的取得路徑的程式碼,動態修改SiteMapPath就是這麼簡單。

1 protected void Page_Load(object sender, EventArgs e)  
2 {  
3     SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(this.ModifyPath);  
4 }  
5  
6 private SiteMapNode ModifyPath(object sender, SiteMapResolveEventArgs e)  
7 {  
8     SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true);  
9     SiteMapNode modifyNode = currentNode;  
10     modifyNode.Url = "http://www.bbb.net";  
11     modifyNode.Title = "bbb";  
12  
13     if ( (modifyNode = modifyNode.ParentNode) != null)  
14     {  
15         modifyNode.Url = "http://www.aaa.net";  
16         modifyNode.Title = "aaa";  
17     }  
18  
19     return currentNode;  
20 }  
看不清楚 | 列印 | 複製

 

那如果是动态的无限级的网站应该怎么做呢,用递归上去做结点吗?可是结点数量不一样啊


Re: 動態修改SiteMapPath路徑

  • a
 0.0 (0 票)
SiteMapNode有一個ChildNodes集合屬性
包含Add、Insert、Remove、Clear等方法可以用來新增或是刪除結點
所以不管是多少層都可以在SiteMapResolve事件中依邏輯增加或減少層級
例如你在這個網站上回文時原本的結點應該是

pure C# 技術社群 >> ASP.NET >> 動態修改SiteMpaPath路徑 >> 回覆文章

但是在程式中已經把 "回覆文章" 這個節點刪除掉了

1 //currentNode 為"回覆文章"  
2 SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true);  
3  
4 if (currentNode.Key.EndsWith("PostEditor.aspx".ToLower()))  
5 {  
6     //currentNode 為"回覆文章"的上一層 "動態修改SiteMpaPath路徑"  
7     currentNode = currentNode.ParentNode;  
8     currentNode.ChildNodes.Clear();  
9 }  
看不清楚 | 列印 | 複製


所以無論是用遞歸或是任何你想的到的方法都可以
只要能自由的新增、刪除、修改結點就沒什麼是做不到的

posted @ 2006-10-24 08:35  Nina  阅读(1458)  评论(5编辑  收藏  举报