2015-11-19 41 views
0

我们无法隐藏显示在顶部导航栏中的SET区域,我正在使用下面的代码片段实现相同效果。但是即使代码没有抛出任何错误,子网站也不会隐藏。在不安全的更新之后,代码无法正常工作。无法使用C#隐藏设置区域代码

代码段:

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

你是什么意思的 “SET区” 吗? – Thriggle

回答

0

我看到一些潜在的问题与您的代码...

1.不要在Using声明包装SPWeb web = sitecollection.RootWeb

虽然通常它是在Using声明中包装SPSite和SPWeb对象的良好做法以确保它们正确处置,SPSite.RootWeb属性为这条规则的例外。处理根网时,自动将与SPSite对象一起配置为。由于您有SPSite siteCollection = new SPSite(...包装在Using声明中,因此您无需担心处置RootWeb

尝试处理根网络两次会将错误添加到您的日志中,并且在以编程方式访问该Web对象时可能会导致问题。

2.实例化你的SPSite和的SPWeb对象的SPSecurity.RunWithElevatedPrivileges委托

内部。SPSecurity.RunWithElevatedPrivileges是有效的,必须检索或委托函数中创建您的SPSite和的SPWeb对象。

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

在使用此方法,检查IsPublishingWeb方法来确认出版行为:执行GetPublishingWeb(web)

Microsoft

3.检查以确保SPWeb对象是一个有效的PublishingWeb在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"); 
     } 
    } 
}); 
相关问题