2009-07-22 12 views
1

Ich habe eine einfache Site, bestehend aus einer Root-Site mit 2 untergeordneten Sites.Benutzerdefinierte SharePoint-Navigation 2 Ebenen tief

Jetzt möchte ich die Navigation für alle drei Standorte genau gleich sein und lesen:

Root-Seite | Kinderseite 1 | Child Site 2

Mit der aktuell ausgewählten Site hervorgehoben.

Ich habe es fast manuell mit einem asp: Repeater-Steuerelement und Portalsitemapprovider tun können. Das Problem ist, ich kann entweder nur die Root-Site auf der Navigation (setzen Sie ShowStartingNode auf True) oder nur die untergeordneten Sites, ich kann nicht beide bekommen.

Ich weiß, dass Sie beide erhalten können, wenn Sie einen Sharepoint verwenden: aspmenu-Steuerelement und staticdisplaylevels auf 2 setzen, aber ich mag nicht den unordentlichen Code dieses Steuerelement ausspuckt. Grundsätzlich möchte ich dieses Steuerverhalten emulieren, das in mein eigenes compliant css eingewickelt wird. Irgendwelche Ideen?

  • auch als Zusatz jemand irgendwelche Ideen hat, wie ich es haben kann, so dass, wenn subsite1/2 nachfolgenden Unterseiten/Seiten haben, ist es egal, wie viele Ebenen tief in der Hierarchie ein Benutzer navigiert wird, es hebt immer noch die relevante subsite1 oder subsite2 hervor? Meine aktuelle Methode vergleicht currentnode mit jedem der Knoten des Providers, die ausgearbeitet werden sollen. Dies funktioniert jedoch nicht, wenn der Benutzer von der Zielseite jeder Unterwebsite weg navigiert ist.

Vielen Dank!

Antwort

1

Ich glaube, Sie haben an der Wurzel beginnen und diesen Knoten in einem ersten Repeater zu machen und dann den childnodes der Wurzel als Datenquelle für einen zweiten Repeater zu verwenden, so etwas wie:

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

Für Ihre zweiten Frage, ich denke (wenn ich es richtig verstehe), dass Sie SiteMapNode.IsDescendantOf() Methode verwenden können, aber ich erinnere mich irgendwie, dass das in SharePoint nicht funktioniert, also habe ich diese Art von Code verwendet, um zu überprüfen, ob ein Knoten "aktiv" ist Knoten:

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

Hoffe es hel ps out irgendwie :-)

+0

Arbeitete perfekt dank so viel! Btw der IsDescendantOf funktioniert auch in SharePoint gut :) – Eriedor

Verwandte Themen