SharePoint快速启动和顶部导航栏消失

时间:2010-02-05 09:40:08

标签: sharepoint menu navigation logging

我对此感到十分困惑:

我在左侧有一个带有QuickLaunch的自定义SharePoint站点和顶部导航栏(默认情况下当然可见)。

此自定义网站有多个子网站,这些网站都从根网站继承导航。

一切正常,但在应用程序池回收后,当我第一次进入任何网站时,左侧和顶部的菜单都消失了!简单刷新后,一切都恢复正常,所有菜单都可见。

重新创建网站和子网站后,它们的行为相同:第一次访问时 - 菜单不可见,刷新后它们可见,并且在我使应用程序池回收之前它们一直可见。

有时只有一个菜单(顶部栏或快速启动)消失,第二个菜单通常可见,我也认为在正常使用网站时,而不是在回收后,我遇到了一种情况。

EventLog中没有任何内容。但是,ULS日志中有一条跟踪。当快速启动或顶部栏消失时,只添加一个新行(是的,只有这一行,没有堆栈跟踪或任何进一步的信息):

02/05/2010 10:24:19.18 w3wp.exe(0x171C)0x17BC Windows SharePoint Services常规8kh7高无法完成此操作。再试一次。

嗯,确实它说某些错误导致菜单消失。任何人都可以帮助我如何诊断这个或者可能知道为什么这些菜单正在消失?

2 个答案:

答案 0 :(得分:0)

您是否在这些网站上启用了发布功能?在恢复已启用发布的已保存网站模板(使用小型黑客)时,这是一种已知情况,其中顶部导航将不会首次出现。

你在运行什么版本? (网站操作=>网站定义显示)

答案 1 :(得分:0)

可能是你在网站定义中搞乱了导航并删除了ID为1002的导航节点。这个节点负责存储网页顶部导航,即使你的网站使用共享导航,你也会在某些情况下消失导航情况。 检查your-web.Navigation.TopNavigationBar是否为null。如果是,那么恢复节点#1002并不是很简单。下面是我为解决生产环境中的这个问题而编写的补丁。先测试一下吧!

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        SPSite site = properties.Feature.Parent as SPSite;

        using (SPWeb web = site.OpenWeb("/information"))
        {
            if (web.Navigation.TopNavigationBar == null)
            {
                List<SPContentDatabase> contentdatabases = new List<SPContentDatabase>();

                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    SPNavigationNode node = new SPNavigationNode("", web.ServerRelativeUrl, false);

                    web.AllowUnsafeUpdates = true;

                    try
                    {
                        SPNavigationNodeCollection navigationNodes = null;
                        navigationNodes = web.Navigation.GlobalNodes;

                        navigationNodes.AddAsFirst(node);
                    }
                    finally
                    {
                        web.AllowUnsafeUpdates = false;
                    }

                    SPContentDatabase database = site.ContentDatabase;

                    using (SqlConnection con = new SqlConnection(database.DatabaseConnectionString))
                    {
                        con.Open();

                        using (SqlCommand command = con.CreateCommand())
                        {
                            command.CommandText = string.Format(@"UPDATE NavNodes
                            SET Url='', Eid={0}, ElementType=1, DocId=NULL
                            WHERE Eid={1}
                                and WebId='{2}'
                                and SiteId='{3}'",
                                1002,
                                node.Id,
                                web.ID.ToString(),
                                site.ID.ToString()
                            );

                            command.ExecuteNonQuery();
                        }
                    }
                });
            }
        }
    }