動態修改SiteMapPath路徑
生活随笔
收集整理的這篇文章主要介紹了
動態修改SiteMapPath路徑
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
http://www.purecs.net/Threads/t376.aspx
在網(wǎng)頁(yè)上放置一個(gè)SiteMapPath可以提供使用者一個(gè)清楚的瀏覽路標(biāo)指示,如果你的SiteMap是靜態(tài)不會(huì)變動(dòng)的倒是很簡(jiǎn)單,只要編寫好一個(gè)XML檔放上去,其它的事就可以不用管了,但是在動(dòng)態(tài)網(wǎng)頁(yè)中SiteMap的路徑可能會(huì)隨著不同的情況而有所更動(dòng),這時(shí)預(yù)先建立的靜態(tài)SiteMap似乎就不怎麼好用了,因?yàn)槟銦o(wú)法事先去預(yù)測(cè)SiteMap該有哪些路徑(就像現(xiàn)在這個(gè)論壇上面的SiteMap),這個(gè)時(shí)後你必需要用程式動(dòng)態(tài)控制SiteMapPath中Node的連結(jié)路徑及顯示的文字,現(xiàn)在只要跟著下面的步驟做就可以簡(jiǎn)單的做到這個(gè)功能。
1. 先在Web Form中建立一個(gè)ModifyPath方法
private SiteMapNode ModifyPath(Object sender, SiteMapResolveEventArgs e)
2. 在Page_Load 中註冊(cè)SiteMapResolve事件給ModifyPath方法
SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(this.ModifyPath);
3. 最後在ModifyPath中撰寫動(dòng)態(tài)路徑及所顯示的文字程式碼即可
private SiteMapNode ModifyPath(object sender, SiteMapResolveEventArgs e) { SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true); SiteMapNode modifyNode = currentNode; modifyNode.Url = "http://www.bbb.net"; modifyNode.Title = "bbb"; if ( (modifyNode = modifyNode.ParentNode) != null) { modifyNode.Url = "http://www.aaa.net"; modifyNode.Title = "aaa"; } return currentNode; }
好了,你現(xiàn)在應(yīng)該可以看到一點(diǎn)點(diǎn)成果,至少SiteMapPath中的結(jié)點(diǎn)能被程式控制了,剩下的只需要寫出ModifyPath中真正的取得路徑的程式碼,動(dòng)態(tài)修改SiteMapPath就是這麼簡(jiǎn)單。
protected void Page_Load(object sender, EventArgs e) { SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(this.ModifyPath); } private SiteMapNode ModifyPath(object sender, SiteMapResolveEventArgs e) { SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true); SiteMapNode modifyNode = currentNode; modifyNode.Url = "http://www.bbb.net"; modifyNode.Title = "bbb"; if ( (modifyNode = modifyNode.ParentNode) != null) { modifyNode.Url = "http://www.aaa.net"; modifyNode.Title = "aaa"; } return currentNode; }
包含Add、Insert、Remove、Clear等方法可以用來(lái)新增或是刪除結(jié)點(diǎn)
所以不管是多少層都可以在SiteMapResolve事件中依邏輯增加或減少層級(jí)
例如你在這個(gè)網(wǎng)站上回文時(shí)原本的結(jié)點(diǎn)應(yīng)該是
pure C# 技術(shù)社群 >> ASP.NET >> 動(dòng)態(tài)修改SiteMpaPath路徑 >> 回覆文章
但是在程式中已經(jīng)把 "回覆文章" 這個(gè)節(jié)點(diǎn)刪除掉了
//currentNode 為"回覆文章" SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true); if (currentNode.Key.EndsWith("PostEditor.aspx".ToLower())) { //currentNode 為"回覆文章"的上一層 "動(dòng)態(tài)修改SiteMpaPath路徑" currentNode = currentNode.ParentNode; currentNode.ChildNodes.Clear(); }
所以無(wú)論是用遞歸或是任何你想的到的方法都可以
只要能自由的新增、刪除、修改結(jié)點(diǎn)就沒(méi)什麼是做不到的
在網(wǎng)頁(yè)上放置一個(gè)SiteMapPath可以提供使用者一個(gè)清楚的瀏覽路標(biāo)指示,如果你的SiteMap是靜態(tài)不會(huì)變動(dòng)的倒是很簡(jiǎn)單,只要編寫好一個(gè)XML檔放上去,其它的事就可以不用管了,但是在動(dòng)態(tài)網(wǎng)頁(yè)中SiteMap的路徑可能會(huì)隨著不同的情況而有所更動(dòng),這時(shí)預(yù)先建立的靜態(tài)SiteMap似乎就不怎麼好用了,因?yàn)槟銦o(wú)法事先去預(yù)測(cè)SiteMap該有哪些路徑(就像現(xiàn)在這個(gè)論壇上面的SiteMap),這個(gè)時(shí)後你必需要用程式動(dòng)態(tài)控制SiteMapPath中Node的連結(jié)路徑及顯示的文字,現(xiàn)在只要跟著下面的步驟做就可以簡(jiǎn)單的做到這個(gè)功能。
1. 先在Web Form中建立一個(gè)ModifyPath方法
| 看不清楚 | 列印 | 複製 | |
| 1 | private?SiteMapNode?ModifyPath(Object?sender,?SiteMapResolveEventArgs?e) ? |
2. 在Page_Load 中註冊(cè)SiteMapResolve事件給ModifyPath方法
| 看不清楚 | 列印 | 複製 | |
| 1 | SiteMap.SiteMapResolve?+=?new?SiteMapResolveEventHandler(this.ModifyPath); ? |
3. 最後在ModifyPath中撰寫動(dòng)態(tài)路徑及所顯示的文字程式碼即可
| 看不清楚 | 列印 | 複製 | |
| 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 | } ? |
好了,你現(xiàn)在應(yīng)該可以看到一點(diǎn)點(diǎn)成果,至少SiteMapPath中的結(jié)點(diǎn)能被程式控制了,剩下的只需要寫出ModifyPath中真正的取得路徑的程式碼,動(dòng)態(tài)修改SiteMapPath就是這麼簡(jiǎn)單。
| 看不清楚 | 列印 | 複製 | |
| 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 | } ? |
那如果是動(dòng)態(tài)的無(wú)限級(jí)的網(wǎng)站應(yīng)該怎么做呢,用遞歸上去做結(jié)點(diǎn)嗎?可是結(jié)點(diǎn)數(shù)量不一樣啊
Re: 動(dòng)態(tài)修改SiteMapPath路徑
由 admin 在 17:20 發(fā)表 SiteMapNode有一個(gè)ChildNodes集合屬性包含Add、Insert、Remove、Clear等方法可以用來(lái)新增或是刪除結(jié)點(diǎn)
所以不管是多少層都可以在SiteMapResolve事件中依邏輯增加或減少層級(jí)
例如你在這個(gè)網(wǎng)站上回文時(shí)原本的結(jié)點(diǎn)應(yīng)該是
pure C# 技術(shù)社群 >> ASP.NET >> 動(dòng)態(tài)修改SiteMpaPath路徑 >> 回覆文章
但是在程式中已經(jīng)把 "回覆文章" 這個(gè)節(jié)點(diǎn)刪除掉了
| 看不清楚 | 列印 | 複製 | |
| 1 | //currentNode?為"回覆文章" ? |
| 2 | SiteMapNode?currentNode?=?SiteMap.CurrentNode.Clone(true); ? |
| 3 | ? |
| 4 | if?(currentNode.Key.EndsWith("PostEditor.aspx".ToLower())) ? |
| 5 | { ? |
| 6 | ????//currentNode?為"回覆文章"的上一層?"動(dòng)態(tài)修改SiteMpaPath路徑" ? |
| 7 | ????currentNode?=?currentNode.ParentNode; ? |
| 8 | ????currentNode.ChildNodes.Clear(); ? |
| 9 | } ? |
所以無(wú)論是用遞歸或是任何你想的到的方法都可以
只要能自由的新增、刪除、修改結(jié)點(diǎn)就沒(méi)什麼是做不到的
轉(zhuǎn)載于:https://www.cnblogs.com/Nina-piaoye/archive/2006/10/24/537870.html
總結(jié)
以上是生活随笔為你收集整理的動態修改SiteMapPath路徑的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 操作系统学习笔记-2.1.1.进程的定义
- 下一篇: 近期课余目标