Как получить информационную страницу формы в Custom XMLSiteMapProvider - PullRequest
0 голосов
/ 26 ноября 2009

Прежде всего я должен сказать вам, что я использую перезапись URL в этом проекте.

Для страницы статьи это URL: www.mysite.com/section1/section2/month/day/year/modifiedArticleName

Для хлебных крошек я использую элемент управления SiteMapPath с пользовательским XMLSiteMapProvider, потому что я не могу сохранить все свои статьи в файле xml. В этом провайдере, в свойстве CurrentNode, если URL является одним из статей, я создаю новый SiteMapNode, связываю его с соответствующим родителем и возвращаю его.

Проблема в том, что мне нужно предоставить этому узлу название статьи. Я не могу получить его из URL, потому что, как вы видите выше, URL использует измененное имя статьи. Поэтому мне нужно получить его со страницы.

В свойстве CurrentNode я могу получить экземпляр текущей текущей страницы, но, поскольку статья загружена в Page_Load, у меня пока нет названия.

Я думал о решении, но точно не знаю, как его реализовать. Итак, у меня должно быть 2 XMLSiteMapProvider, по умолчанию и мой пользовательский. И используйте пользовательский только на моей странице статьи, инициализируя его только после того, как я загружу детали своей статьи. Может ли кто-нибудь указать мне правильное направление?

Приветствие.

1 Ответ

0 голосов
/ 27 ноября 2009

Мне удалось достичь своей цели, выполнив следующее:

В файле 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;
                        }
                    }
...