我们无法隐藏顶部导航栏中显示的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();
});
}
}
答案 0 :(得分:0)
我发现您的代码存在一些潜在问题......
<强> 1。不要将SPWeb web = sitecollection.RootWeb
包裹在Using
声明中
虽然通常最好在Using
语句中包装SPSite和SPWeb对象以确保它们被正确处理,但SPSite.RootWeb
属性是此规则的一个例外。当处置时,根网络与SPSite对象一起自动。由于SPSite siteCollection = new SPSite(...
语句中包含Using
,因此您无需担心RootWeb
的处置。
尝试两次处理根网站会在日志中添加错误,并且在以编程方式访问该网络对象时可能会出现问题。
<强> 2。在SPSecurity.RunWithElevatedPrivileges
代理
要使SPSecurity.RunWithElevatedPrivileges
生效,您必须在委托功能中检索或创建SPSite和SPWeb对象。
您的代码在运行RunWithElevatedPrivileges
之前获取SPSite和SPWeb对象,因此对这些对象的任何操作都将在当前用户的上下文中运行,而不是使用提升的权限运行。
第3。在执行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");
}
}
});