[转贴]動態修改SiteMapPath路徑

       今天又发现了一些新问题,其中就有一个关于动态修改 SiteMapPath的问题。找了N个网页,也试了N种方法,不过其实也就那么几个来回重复。终于在一个帖子中找到了解决的方法,贴出来以备将来使用。

        由于原文是帖子问答的形式,本文整理为说明形式(原文的繁体未作修改)。

        原文地址:http://www.purecs.net/thread/topic376_1.aspx

                            http://www.purecs.net/thread/topic479_1.aspx


实例:

pure C# 技術社群 » ASP.NET » 動態修改SiteMapPath路徑 

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

1. 先在Web Form中建立一個ModifyPath方法

private SiteMapNode ModifyPath(Object sender, SiteMapResolveEventArgs e) 
 2. 在Page_Load 中註冊SiteMapResolve事件給ModifyPath方法

SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(this.ModifyPath);
3. 最後在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;  
 }

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

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

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

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

 //currentNode 為"回覆文章"  
 SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true);  
  
 if (currentNode.Key.EndsWith("PostEditor.aspx".ToLower()))  
 ...{  
     //currentNode 為"回覆文章"的上一層 "動態修改SiteMpaPath路徑"  
     currentNode = currentNode.ParentNode;  
     currentNode.ChildNodes.Clear();  

  现在变成:

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

ps:我对上面的路径理解不一定很对,也没有进行测试,如果有错会更新

      再如,在当前节点的显示中,加入新的节点可以如下操作(为避免歧义,贴出该功能的程序而与前面无关,当然,原文也是这么写滴,可以偷懒 : D )

效果:

                        pure C# 技術社群 » ASP.NET » 動態修改SiteMapPath路徑» 新的節點

程序如下:

public partial class SiteMapPathDemo : System.Web.UI.Page  
 ...{  
     protected void Page_Load(object sender, EventArgs e)  
     ...{  
        SiteMap.SiteMapResolve += new SiteMapResolveEventHandler(SiteMap_SiteMapResolve);  
    }  
 
    private SiteMapNode SiteMap_SiteMapResolve(object sender, SiteMapResolveEventArgs e)  
     ...{  
         SiteMapNode currentNode = null;  
  
         if (SiteMap.CurrentNode != null)  
         ...{  
            currentNode = SiteMap.CurrentNode.Clone(true);  
  
             SiteMapNodeCollection childNodes = new SiteMapNodeCollection();  
  
             SiteMapNode newNode = new SiteMapNode(e.Provider, "newNode", "OthrePage.aspx", "新的節點");  
            newNode.ParentNode = currentNode;  
             childNodes.Add(newNode);  
             currentNode.ChildNodes = childNodes;  
  
             currentNode = newNode;  
         }  
  
         return currentNode;  
     }  

 

 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/redfox521/archive/2008/04/07/2257198.aspx

posted on 2010-09-11 07:21  陈老师博客  阅读(650)  评论(0编辑  收藏  举报

导航