如何在自定义XMLSiteMapProvider中获取信息表单页面

问题描述:

首先我需要告诉你,我在这个项目上使用URL重写。如何在自定义XMLSiteMapProvider中获取信息表单页面

为此,文章页面的网址:www.mysite.com/section1/section2/month/day/year/modifiedArticleName

对于面包我用SiteMapPath控件与自定义XMLSiteMapProvider,因为我不能让我所有的文章都在xml文件中。在这个提供程序中,在CurrentNode属性中,如果url是一篇文章,我创建一个新的SiteMapNode,将它链接到适当的父项并返回它。

问题是我需要向该节点提供文章名称。我无法从网址获取它,因为,就像您在上面看到的那样,该网址使用修改后的文章名称。所以我需要从页面中获取它。

在CurrentNode属性中,我能够获取当前正在运行的页面的实例,但自从文章加载到Page_Load后,我还没有标题。

我想过一个解决方案,但我不确定如何实现它。所以,我应该有2个XMLSiteMapProvider,默认的和我自定义的一个。只在我的文章页面上使用自定义文件,只有在加载我的文章详细信息后才初始化它。有人能指出我正确的方向吗?

干杯。

我设法实现我的目标做这个:

在web.config文件中:

<siteMap defaultProvider="RegularXMLSiteMapProvider"> 
    <providers> 
    <add name="RegularXMLSiteMapProvider" type="System.Web.XmlSiteMapProvider" siteMapFile="~/Web.sitemap" /> 
    <add name="EnhancedXMLSiteMapProvider" type="MyApp.App_Code.EnhancedXMLSiteMapProvider, MyApp" siteMapFile="~/Web.sitemap"/> 
    </providers> 
</siteMap> 

每当我一个普通网页上,我使用的是默认提供。当我在文章页面上,我这样做:

protected void Page_Load(object sender, EventArgs e) 
    { 
     LoadArticle(); 

     MasterPages.MyMasterPage myMaster = (MasterPages. MyMasterPage)this.Master; 
     myMaster.MySiteMapPath.SiteMapProvider = "EnhancedXMLSiteMapProvider"; 
    } 

最后,在供应商的CurrentNode属性我得到的文章标题:

MyApp.ArticlePage page = (MyApp.ArticlePage)HttpContext.Current.Handler; 
        if (page != null) 
        { 
         if (!string.IsNullOrEmpty(page.Article.Title)) 
         { 
          articleName = page.Article.Title; 
         } 
        }