Question

Tout d'abord, je dois vous dire que j'utilise la réécriture d'URL sur ce projet.

Pour la page de l'article, il s'agit de l'URL: www.monsite.com/section1/section2/month/day/year/modifiedArticleName

Pour les éléments de navigation, j'utilise le contrôle SiteMapPath avec un XMLSiteMapProvider personnalisé, car je ne peux pas conserver tous mes articles dans le fichier xml. Dans ce fournisseur, dans la propriété CurrentNode, si l'URL fait partie d'un article, je crée un nouveau SiteMapNode, le lie au parent approprié et le renvoie.

Le problème est que je dois fournir à ce nœud le nom de l'article. Je ne peux pas l'obtenir à partir de l'URL, car, comme vous le voyez ci-dessus, l'URL utilise un nom d'article modifié. J'ai donc besoin de l'obtenir à partir de la page.

Dans la propriété CurrentNode, je peux obtenir une instance de la page en cours d'exécution, mais, comme l'article est chargé sur Page_Load, je n'ai pas encore le titre.

J'ai pensé à une solution mais je ne sais pas exactement comment la mettre en œuvre. Donc, je devrais avoir 2 XMLSiteMapProvider, celui par défaut et mon personnalisé. Et utilisez le personnalisé uniquement sur la page de mon article, en l’initialisant uniquement après le chargement des détails de mon article. Quelqu'un peut-il m'indiquer la bonne direction?

A bientôt.

Était-ce utile?

La solution

J'ai réussi à atteindre mon objectif en faisant ceci:

Dans le fichier 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>

Chaque fois que je suis sur une page normale, j'utilise le fournisseur par défaut. Lorsque je suis sur la page de l'article, je fais ceci:

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

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

Enfin, dans la propriété CurrentNode du fournisseur, le titre de l'article est indiqué:

MyApp.ArticlePage page = (MyApp.ArticlePage)HttpContext.Current.Handler;
                    if (page != null)
                    {
                        if (!string.IsNullOrEmpty(page.Article.Title))
                        {
                            articleName = page.Article.Title;
                        }
                    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top