1

2つの子サイトを持つルートサイトで構成される単純なサイトがあります。

ここで、3つのサイトすべてのナビゲーションをまったく同じにして、次のように読みます。

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

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

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

sharepoint:aspmenuコントロールを使用し、staticdisplaylevelsを2に設定すると、両方を取得できることはわかっていますが、このコントロールが吐き出す厄介なコードは好きではありません。基本的に、私は自分の準拠したcssにラップされたこのコントロールの動作をエミュレートしたいと思います。何か案は?

  • また、追加として、私がそれをどのように持つことができるかについて誰かが考えているので、subsite1 / 2に後続のサブサイト/ページがある場合、ユーザーがナビゲートしている階層の深さのレベルに関係なく、関連するサブサイト1またはsubsite2?私の現在の方法では、currentnodeを各プロバイダーノードと比較して、強調表示する必要があるノードを特定しますが、ユーザーが各サブサイトのランディングページから移動すると、これは機能しません。

ありがとう!

4

1 に答える 1

1

ルートから始めて、最初のリピーターでそのノードをレンダリングしてから、ルートの子ノードを2番目のリピーターのデータソースとして使用する必要があると思います。

<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>

2番目の質問については、(正しく理解していれば)SiteMapNode.IsDescendantOf()メソッドを使用できると思いますが、SharePointでは機能しないことを思い出したので、この種のコードを使用してノードが「アクティブ」ノード:

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

それが何らかの形で役立つことを願っています:-)

于 2009-07-22T18:29:38.160 に答える