2015-11-19 2 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. Не заворачивайте SPWeb web = sitecollection.RootWeb в Using заявлении

Хотя обычно это хорошая практика для переноса объектов SPSite и SPWeb в операторы Using для обеспечения правильного их удаления, свойство SPSite.RootWeb исключение из этого правила. Корневое полотно размещено автоматически вместе с объектом SPSite, когда оно расположено. Поскольку у вас есть SPSite siteCollection = new SPSite(..., завернутый в заявление Using, вам не нужно беспокоиться об утилизации RootWeb.

Попытка утилизации корневой сети дважды добавит ошибки в ваши журналы и может вызвать проблемы при обращении к этому веб-объекту программно.

2. Инстанцировать ваш SPSite и объекты SPWeb внутри SPSecurity.RunWithElevatedPrivileges делегата

Для SPSecurity.RunWithElevatedPrivileges, чтобы быть эффективной, вы должны получить или создать SPSite и объекты SPWeb в функции делегата.

Ваш код получает объекты SPSite и SPWeb до запуска RunWithElevatedPrivileges, поэтому любые операции над этими объектами будут выполняться в контексте текущего пользователя вместо запуска с повышенными привилегиями.

3. Проверьте, чтобы убедиться, что объект SPWeb является действительным PublishingWeb перед выполнением GetPublishingWeb(web)

От 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"); 
     } 
    } 
}); 
Смежные вопросы