Как получить страницу формы информации в Custom XMLSiteMapProvider

StackOverflow https://stackoverflow.com/questions/1803702

Вопрос

Прежде всего, я должен сказать вам, что в этом проекте я использую переписывание 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;
                        }
                    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top