2015-11-19 48 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"); 
     } 
    } 
}); 
相關問題