1

我有一个简单的站点,其中包含一个带有 2 个子站点的根站点。

现在我希望所有 3 个站点的导航完全相同并阅读:

根站点 | 子站点 1 | 子站点 2

突出显示当前选择的站点。

我几乎可以使用 asp:repeater 控件和 portalsitemapprovider 手动执行此操作。问题是我可以只获取导航上的根站点(将 ShowStartingNode 设置为 True)或只获取子站点,我无法同时获取两者。

我知道如果您使用 sharepoint:aspmenu 控件并将 staticdisplaylevels 设置为 2,您可以获得两者,但我不喜欢该控件吐出的凌乱代码。基本上,我想模拟这种包含在我自己的兼容 css 中的控件行为。有任何想法吗?

  • 另外,作为补充,是否有人对我如何拥有它有任何想法,所以如果 subsite1/2 有后续的子网站/页面,那么用户正在导航的层次结构中有多少级别并不重要,它仍然会突出显示相关的 subsite1 或子站点2?我当前的方法将 currentnode 与每个提供程序节点进行比较,以找出应该突出显示的节点,但是一旦用户离开每个子站点的登录页面,这将不起作用。

谢谢!

4

1 回答 1

1

我认为您必须从根开始并在第一个转发器中渲染该节点,然后将根的子节点用作第二个转发器的数据源,例如:

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

希望它以某种方式有所帮助:-)

于 2009-07-22T18:29:38.160 回答