0

My Web.sitemap には、次のものがあります。

<siteMapNode url="~/Groups/ViewGroups.aspx" urlRoute="groups/{PostId}/{PostTitle}" />
</siteMapNode>

私のMasterPageでは、ItemDataBoundイベントを実装して、マスターページを動的に実装する各ページのタイトルを設定しようとしましたが、何らかの理由でタイトルが設定されていません。

protected void SiteMapPath1_ItemDataBound(object sender, SiteMapNodeItemEventArgs e)
{
    string CurrentNodeTitle = GetTitleFromDatabase();

    if (e.Item.ItemType == SiteMapNodeItemType.Current) {
         e.Item.SiteMapNode.Title = CurrentNodeTitle;
    }
}

ItemCreated イベントでもこれを試しましたが、それでも機能しませんでした。

Web.sitemap でタイトルを設定すると完全に機能しますが、e.Item.SiteMapNode.Title = CurrentNodeTitle;を使用して設定すると、タイトルは設定されていません。

4

2 に答える 2

0

これを試して。

private string currentKey = SiteMap.CurrentNode.Key
protected void SiteMapPath1_ItemDataBound(object sender, MenuEventArgs e)
{
    string CurrentNodeTitle = GetTitleFromDatabase();

    if (e.Item.DataPath == currentKey){
         e.Item.Text = CurrentNodeTitle;
    }
}

編集メモ:

それはMenuEventArgsでなければなりません

于 2012-08-18T07:32:50.250 に答える
0

この質問は現在約 6 年前のもので、1 つの回答は完全に間違っており、おそらく削除する必要があります。答えを見つけるのに苦労しました。思ったほど簡単ではありませんが、それでも答えは非常に単純です。

名前空間 (SiteMapPath のインスタンスではありません!) から静的 SiteMapクラスSiteMapResolveイベントを使用すると、その場で URL とタイトルを操作できます。System.Web

私の場合、データベースからローカライズされた文字列を取得するカスタム ローカライズ メソッドがあります。サイトマップのタイトルには、文字列を識別するために使用されるキーが含まれています。これは、私のマスター ページのコード ビハインドです。

protected void Page_Load(object sender, EventArgs e)
{
    // ...

    SiteMap.SiteMapResolve += (o, args) =>
    {
        if (SiteMap.CurrentNode == null)
            return null;

        SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true);
        currentNode.Title = SessionObject.LocalizeText(currentNode.Title);

        SiteMapNode tempNode = currentNode;
        while (tempNode.ParentNode != null)
        {
            tempNode = tempNode.ParentNode;
            tempNode.Title = SessionObject.LocalizeText(tempNode.Title);
        }

        return currentNode;
    };

    // ...
}

次に、マスター ページ ASPX (または、おそらくこのマスター ページを利用する任意の ASPX ページ) で、追加することができ<asp:SiteMapPath runat="server" ... />、SiteMapResolve イベントによって処理される必要があります。

于 2018-03-20T10:26:22.183 に答える