Frage

Zunächst einmal muss ich Ihnen sagen, dass ich URL an diesem Projekt Umschreiben verwenden.

Für die Artikelseite Dies ist die URL: www.mysite.com/section1/section2/month/day/year/modifiedArticleName

Für Paniermehl verwende ich SiteMapPath Steuerung mit einem benutzerdefinierten XmlSiteMapProvider, weil ich nicht alle meine Artikel in der XML-Datei halten. In diesem Anbieter im CurrentNode Eigenschaft, wenn die URL eines eines Artikels ist, erstelle ich eine neue SiteMapNode, verknüpfen es mit dem entsprechenden Eltern und gibt es zurück.

Das Problem ist, dass ich zu diesem Knoten des Artikelnamen zur Verfügung stellen muß. Ich kann es nicht aus der URL erhalten, weil, wie Sie oben sehen, die URL einen modifizierten Artikelnamen verwendet. Also muss ich es von der Seite gelangen.

In der CurrentNode Eigenschaft Ich bin in der Lage, eine Instanz von der aktuellen Seite zu erhalten, aber, da der Artikel auf Page_Load geladen ist, habe ich nicht den Titel noch.

Ich dachte an einer Lösung, aber ich bin nicht sicher, wie es zu implementieren. So sollte ich 2 XmlSiteMapProvider haben, das als Standard und meine Gewohnheit ein. Und verwenden Sie die benutzerdefinierte man sich nur auf meinen Artikel Seite, es zu initialisieren erst, nachdem ich meinen Artikel Details laden. Kann jemand mich in die richtige Richtung?

Prost.

War es hilfreich?

Lösung

ich es geschafft, mein Ziel zu erreichen, indem dies zu tun:

In der Datei 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>

Jedes Mal, wenn ich auf einer regulären Seite bin, benutze ich den Standardanbieter. Wenn ich auf der Artikelseite bin ich dies tun:

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

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

Und schließlich in der CurrentNode Eigenschaft des Anbieters ich den Titel des Artikels:

MyApp.ArticlePage page = (MyApp.ArticlePage)HttpContext.Current.Handler;
                    if (page != null)
                    {
                        if (!string.IsNullOrEmpty(page.Article.Title))
                        {
                            articleName = page.Article.Title;
                        }
                    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top