自定义SiteMap后,SiteMap.SiteMapResolve事件处理程序不执行解决办法

我们在建设asp.net网站时,有时不可避免的会用到多个SiteMap配置文档

在MSDN中有说明,只需要要web.config中添加sitemap配置节,并在sitemappath控件中指定sitemapprovider就可以实现多个sitemap文档的应用

例如:

 

ExpandedBlockStart.gif 代码
  < siteMap  enabled ="true"  defaultProvider ="sitemap" >
  
< providers >
  
< clear  />
  
< add  name ="sitemap"  siteMapFile ="web.sitemap"  type ="System.Web.XmlSiteMapProvider"  description ="XmlSiteMapProvider that loads nttc.sitemap" />
  
< add  name ="nttc"  siteMapFile ="nttc.sitemap"  type ="System.Web.XmlSiteMapProvider"  description ="XmlSiteMapProvider that loads nttc.sitemap" />
  
</ providers >
  
</ siteMap >

 

在相关页面添加

< asp:SiteMapPath  ID ="SiteMapPath1"  runat ="server"  SiteMapProvider ="nttc" ></ asp:SiteMapPath >

 


如果需要通过编程方式修改,则在相关的页面中添加事件处理程序(在默认的情况)

ExpandedBlockStart.gif 代码
  Protected   Sub  Page_Load( ByVal  sender  As   Object ByVal  e  As  System.EventArgs)  Handles   Me .Load
  
AddHandler  System.Web.SiteMap.SiteMapResolve,  AddressOf  SiteMapResolve
  
End Sub
  
Protected   Function  SiteMapResolve( ByVal  sender  As   Object ByVal  e  As  SiteMapResolveEventArgs)  As  SiteMapNode
  
Dim  c  As  SiteMapNode  =  e.Provider.CurrentNode.Clone()
  c.Title 
=   " 测试 "
  
Return  c
  
End Function

  
Protected   Sub  Page_Unload( ByVal  sender  As   Object ByVal  e  As  System.EventArgs)  Handles   Me .Unload
  
RemoveHandler  SiteMap.SiteMapResolve,  AddressOf  SiteMapResolve
  
End Sub

 

但在多个SiteMap文档配置的情况下,执行页面结果能显示当前节点在nttc.sitemap的配置信息,即已找到页面但无法通过绑定的SiteMapResolve事件处理程序来修改,也就是添加的SiteMapResolve事件处理程序此时并未执行,如果将nttc在web.config设置为defaultProvider的情况下SiteMapResolve事件处理程序被执行。

SiteMap.SiteMapResolve应该是用于默认的Provider的事件,经过测试后,通过绑定到当前的Provider.SiteMapResolve来实现

将原来的

 

AddHandler  System.Web.SiteMap.SiteMapResolve,  AddressOf  SiteMapResolve

 

修改为:

 

   Dim  provider  As  SiteMapProvider  =  SiteMapPath1.Provider
        
AddHandler  provider .SiteMapResolve,  AddressOf  SiteMapResolve

 

 测试后成功

转载于:https://www.cnblogs.com/dreamcat/archive/2010/07/24/1784276.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值