今天没怎么做,出去了一趟。接着研究了一下导航:
我们通过自己开发导航控件的方式来实现三级菜单的显示。
写一个类继承自Menu,重写CreateChildControls,从快速启动中读取信息,显示到Menu中。
代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI.WebControls;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Navigation;
namespace CodeArt.SharePoint.WebParts
{
public class NavigationMenu : Menu
{
protected override void CreateChildControls()
{
if (this.Items.Count > 0)
return;
base.CreateChildControls();
SPWeb web = SPContext.Current.Web;
Microsoft.SharePoint.Navigation.SPNavigation sp = web.Navigation;
BuildMenuItem(sp.QuickLaunch, this.Items);
}
void BuildMenuItem(SPNavigationNodeCollection navNodes, MenuItemCollection menuItems)
{
foreach (SPNavigationNode navNode in navNodes)
{
MenuItem menuItem = new MenuItem();
menuItem.Text = navNode.Title;
menuItem.NavigateUrl = navNode.Url;
menuItems.Add(menuItem);
BuildMenuItem(navNode.Children, menuItem.ChildItems);
}
}
}
}
以上控件继承于Menu,在CreateChildControl方法中调用导航API,递归生成菜单项。
将项目编译,将DLL部署到GAC中,然后可以修改母板页,添加NavigationMenu控件。
在母板页的头部添加注册指令:
<%@ Register Tagprefix="CodeArt" Namespace="CodeArt.SharePoint.WebParts" Assembly="CodeArt.SharePoint, Version=1.0.0.0, Culture=neutral, PublicKeyToken=" %>
将QuickLaunchNavigationManager控件删掉,添加以下代码:
<CodeArt:NavigationMenu runat="server" ID="navMenu" Width="100%" StaticDisplayLevels="3"/>