0

まず、このプロジェクトで URL 書き換えを使用していることをお伝えする必要があります。

記事ページの URL は次のとおりです: www.mysite.com/section1/section2/month/day/year/modifiedArticleName

ブレッドクラムについては、カスタム XMLSiteMapProvider で SiteMapPath コントロールを使用します。これは、すべての記事を xml ファイルに保持できないためです。このプロバイダーの CurrentNode プロパティで、url が記事の 1 つである場合、新しい SiteMapNode を作成し、適切な親にリンクして返します。

問題は、そのノードに記事名を提供する必要があることです。上記のように、URL は変更された記事名を使用しているため、URL から取得できません。そのため、ページから取得する必要があります。

CurrentNode プロパティでは、現在実行中のページのインスタンスを取得できますが、記事が Page_Load に読み込まれるため、まだタイトルがありません。

解決策について考えましたが、それを実装する方法が正確にはわかりません。したがって、デフォルトとカスタムの 2 つの XMLSiteMapProvider が必要です。そして、記事の詳細を読み込んだ後にのみ初期化して、記事ページでのみカスタムのものを使用します。誰かが私を正しい方向に向けることができますか?

乾杯。

4

1 に答える 1

0

私はこれを行うことで目標を達成することができました:

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;
                        }
                    }
于 2009-11-27T07:39:20.010 に答える