Как получить страницу формы информации в Custom XMLSiteMapProvider
-
05-07-2019 - |
Вопрос
Прежде всего, я должен сказать вам, что в этом проекте я использую переписывание URL-адресов.
Для страницы статьи это URL:www.mysite.com/section1/section2/месяц/день/год/modifiedArticleName
Для навигации я использую элемент управления SiteMapPath со специальным XMLSiteMapProvider, поскольку не могу хранить все свои статьи в XML-файле.В этом провайдере в свойстве CurrentNode, если URL-адрес является одним из статей, я создаю новый SiteMapNode, связываю его с соответствующим родительским элементом и возвращаю его.
Проблема в том, что мне нужно предоставить этому узлу название статьи.Я не могу получить его по URL-адресу, потому что, как вы видите выше, в URL-адресе используется измененное название статьи.Поэтому мне нужно получить его со страницы.
В свойстве CurrentNode я могу получить экземпляр текущей работающей страницы, но, поскольку статья загружена в Page_Load, у меня пока нет заголовка.
Я думал о решении, но не знаю, как его реализовать.Итак, у меня должно быть два 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;
}
}