如何在自定义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;
}
}