我有一个简单的网站,其中包含一个包含2个子网站的根网站。
现在我希望所有3个网站的导航完全相同并阅读:
根网站|儿童网站1 |儿童网站2
突出显示当前选定的网站。
我几乎可以使用asp:repeater control和portalsitemapprovider手动执行此操作。问题是我可以只在导航上获得根站点(将ShowStartingNode设置为True)或仅仅是子站点,我不能同时获得两者。
我知道如果你使用sharepoint你可以得到两个:aspmenu控件并将staticdisplaylevels设置为2但我不喜欢这个控件吐出的乱码。基本上我想模仿包含在我自己的兼容css中的这个控件行为。有什么想法吗?
谢谢!
答案 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);
希望以某种方式帮助: - )