无法使用C#代码隐藏设置区域

时间:2015-11-19 14:40:09

标签: c# sharepoint

我们无法隐藏顶部导航栏中显示的SET区域,我使用下面的代码片段来实现相同的功能。但即使代码没有抛出任何错误,子网站也不会被隐藏。有点无能为力,因为在不安全的更新之后代码按预期运行。

代码段:

using (SPSite siteCollection = new SPSite("http://****:****/VijaiTest/"))
{
    using (SPWeb web = siteCollection.RootWeb)
    {
        PublishingWeb publishingWeb = PublishingWeb.GetPublishingWeb(web);
        // Global Navigation 
        //Show Subsites 
        publishingWeb.Navigation.GlobalIncludeSubSites = false;
        //Show Pages 
        publishingWeb.Navigation.GlobalIncludePages = false;
        // Maximum number of dynamic items to show within this level of navigation: 
        publishingWeb.Navigation.GlobalDynamicChildLimit = 60;

        publishingWeb.IncludeInCurrentNavigation = false;

        web.AllowUnsafeUpdates = true;

        SPSecurity.RunWithElevatedPrivileges(delegate()
        {
            //Update the changes
            publishingWeb.Update();
        });
    }
}

1 个答案:

答案 0 :(得分:0)

我发现您的代码存在一些潜在问题......

<强> 1。不要将SPWeb web = sitecollection.RootWeb包裹在Using声明中

虽然通常最好在Using语句中包装SPSite和SPWeb对象以确保它们被正确处理,但SPSite.RootWeb属性是此规则的一个例外。当处置时,根网络与SPSite对象一起自动。由于SPSite siteCollection = new SPSite(...语句中包含Using,因此您无需担心RootWeb的处置。

尝试两次处理根网站会在日志中添加错误,并且在以编程方式访问该网络对象时可能会出现问题。

<强> 2。在SPSecurity.RunWithElevatedPrivileges代理

中实例化您的SPSite和SPWeb对象

要使SPSecurity.RunWithElevatedPrivileges生效,您必须在委托功能中检索或创建SPSite和SPWeb对象。

您的代码在运行RunWithElevatedPrivileges之前获取SPSite和SPWeb对象,因此对这些对象的任何操作都将在当前用户的上下文中运行,而不是使用提升的权限运行。

第3。在执行GetPublishingWeb(web)

之前,请检查以确保SPWeb对象是有效的PublishingWeb

来自Microsoft

  

在使用此方法之前,请检查IsPublishingWeb方法以确认此SPWeb类实例支持发布行为。如果SPWeb不支持发布,则PublishingWeb包装器的方法和属性可能会出现意外行为。

在这些更改之后,您的代码将如下所示:

SPSecurity.RunWithElevatedPrivileges(delegate() {
    using(SPSite siteCollection = new SPSite("http://****:****/VijaiTest/")) {
        SPWeb web = siteCollection.RootWeb;
        if(PublishingWeb.IsPublishingWeb(web)){
            PublishingWeb publishingWeb = PublishingWeb.GetPublishingWeb(web);
            // Don't show Subsites 
            publishingWeb.Navigation.GlobalIncludeSubSites = false;
            // Don't show Pages 
            publishingWeb.Navigation.GlobalIncludePages = false;
            // Maximum number of dynamic items to show within this level of navigation: 
            publishingWeb.Navigation.GlobalDynamicChildLimit = 60;
            publishingWeb.IncludeInCurrentNavigation = false;
            web.AllowUnsafeUpdates = true;
            //Update the changes
            publishingWeb.Update();
        }else{
            throw new Exception("Web is not a publishing web");
        }
    }
});