2009-07-22 19 views
1

私は2つの子サイトを持つルートサイトで構成される単純なサイトを持っています。カスタムSharePointナビゲーション2レベル深い

今、私はすべての3つのサイトのナビゲーションがまったく同じであることと、読みたい:

ルートサイトを|子サイト1 |子サイト2

現在選択されているサイトを強調表示します。

私はこれをasp:repeaterコントロールとportalsitemapproviderを使用して手動でほぼ行うことができました。問題は、ナビゲーションのルートサイト(ShowStartingNodeをTrueに設定)または子サイトだけを取得して、両方を取得できないことです。

シェアポイントを使用すると、aspmenuコントロールとstaticdisplaylevelsを2に設定できますが、このコントロールが吐き気のないコードが好きではありません。基本的に私は自分の準拠するCSSでラップされたこのコントロールの動作をエミュレートしたい。何か案は?加えて、誰もがsubsite1/2は、後続のサブサイト/ページを持っているので、もし私がそれを持つことができる方法上の任意のアイデアを持っています。また、ユーザーがナビゲートしているどのように多くのレベルが深い階層で重要ではありません

  • 、それは関連するサブサイト1またはサブサイト2をまだ強調表示していますか?現在の方法では、currentnodeと各プロバイダノードを比較して強調表示する必要がありますが、ユーザーが各サブサイトのランディングページから移動した後は機能しません。

ありがとう!

答えて

1

私は、あなたがルートから開始し、最初のリピータで、そのノードをレンダリングした後、第2の中継のためのデータソースとして根ののchildNodesを使用して、何かしなければならないと思う:あなたの第二のために

<asp:Repeater runat="server" ID="MenuRepeater" 
DataSourceID="MainNavigationDataSource"> 

<HeaderTemplate> 
    // code here 
</HeaderTemplate> 

<ItemTemplate> 
    // code here 
<asp:Repeater runat="server" ID="ChildMenuRepeater" 
DataSource='<%# ((SiteMapNode)Container.DataItem).ChildNodes %>'> 

<HeaderTemplate> 
    // code here 
</HeaderTemplate> 

<ItemTemplate> 
    // code here 

</ItemTemplate> 

</ItemTemplate> 

あなたはSiteMapNode.IsDescendantOf()メソッドを使用することができますが、私は何とかSharePointで動作しないことを思い出しているので、この種のコードを使用して、ノードが "アクティブ"ノード:

string CurrentContextUrl = SPUtility.GetPageUrlPath(HttpContext.Current); 
Uri CurrentUri = new Uri(CurrentContextUrl); 
bool Active = CurrentUri.LocalPath.Equals(currentNode.Url); 

希望ps何とかして:-)

+0

本当にありがとう! Btw IsDescendantOfはSharePointでも正常に動作します:) – Eriedor

関連する問題