If you use structural navigation on your publishing Sharepoint site and navigation nodes are created as headings (NodeType = Heading), then it is quite straightforward to delete such navigation nodes programmatically. Here is how it can be done:
var web = ... var pweb = PublishingWeb.GetPublishingWeb(web); var globalNavigation = pweb.Navigation.GlobalNavigationNodes; var nodePage = globalNavigation.Cast<SPNavigationNode>().FirstOrDefault(n => (n.Title == "Test")); if (nodePage != null) { nodePage.Delete(); }
In this example we delete navigation node with title “Test”. However if you will try to delete navigation nodes which were created as AuthoredLink* (see NodeTypes Enum):
- AuthoredLink
- AuthoredLinkPlain
- AuthoredLinkToPage
- AuthoredLinkToWeb
using the same code you will find that link is not get deleted. The workaround is to change NodeType property first to Heading and then delete the node:
var web = ... var pweb = PublishingWeb.GetPublishingWeb(web); var globalNavigation = pweb.Navigation.GlobalNavigationNodes; var nodePage = globalNavigation.Cast<SPNavigationNode>().FirstOrDefault(n => (n.Title == "Test" && (n.Properties != null && n.Properties["NodeType"] != null && n.Properties["NodeType"] is string && (n.Properties["NodeType"] as string == "AuthoredLink" || (n.Properties["NodeType"] as string).StartsWith("AuthoredLink")))); if (nodePage != null) { nodePage.Properties["NodeType"] = "Heading"; nodePage.Update(); // reinitialize navigation nodes pweb = PublishingWeb.GetPublishingWeb(web); globalNavigation = pweb.Navigation.GlobalNavigationNodes; nodePage = globalNavigation.Cast<SPNavigationNode>().FirstOrDefault(n => (n.Title == "Test); if (nodePage != null) { nodePage.Delete(); } }
After that AuthoredLink navigation node will be successfully deleted.
No comments:
Post a Comment