动态修改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;   
     }
   

 


  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值