自定义SharePoint导航2级别深入

时间:2009-07-22 17:13:58

标签: asp.net sharepoint navigation portalsitemapprovider

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

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

根网站|儿童网站1 |儿童网站2

突出显示当前选定的网站。

我几乎可以使用asp:repeater control和portalsitemapprovider手动执行此操作。问题是我可以只在导航上获得根站点(将ShowStartingNode设置为True)或仅仅是子站点,我不能同时获得两者。

我知道如果你使用sharepoint你可以得到两个:aspmenu控件并将staticdisplaylevels设置为2但我不喜欢这个控件吐出的乱码。基本上我想模仿包含在我自己的兼容css中的这个控件行为。有什么想法吗?

  • 另外作为一个补充,任何人都有任何关于如何拥有它的想法,所以如果subsite1 / 2有后续的子网站/页面,用户导航的层次结构深度有多少并不重要,它仍然突出显示相关的子网站1或子网站2?我当前的方法将currentnode与每个提供者节点进行比较,以确定哪些应该突出显示,但是一旦用户导航离开每个子网站的登录页面,这就不起作用。

谢谢!

1 个答案:

答案 0 :(得分: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中不起作用所以我用这种代码检查是否一个node是“活动”节点:

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

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