<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Microsoft Tech Blogs : Navigation Provider</title><link>http://blogs.msdn.com/ketaanhs/archive/tags/Navigation+Provider/default.aspx</link><description>Tags: Navigation Provider</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>CUSTOM Navigation Provider for MOSS</title><link>http://blogs.msdn.com/ketaanhs/archive/2009/01/18/custom-navigation-provider-for-moss.aspx</link><pubDate>Sun, 18 Jan 2009 23:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9338751</guid><dc:creator>ketaanhs</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/ketaanhs/comments/9338751.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ketaanhs/commentrss.aspx?PostID=9338751</wfw:commentRss><wfw:comment>http://blogs.msdn.com/ketaanhs/rsscomments.aspx?PostID=9338751</wfw:comment><description>&lt;P&gt;Has there been a customer requirement for you where you wanted to create the left or Top navigation based on a custom recordset or from a List (stored in Sharepoint so that easy to update) in a WCM using Sharepoint 2007 / MOSS. Did you have a requirement to Expand and Collapse the menu (server side, not AJAX style) using the custom provider? Are you using .Net framework 3.5? If all this is your requirement then you should look at the great work &lt;STRONG&gt;&lt;U&gt;&lt;EM&gt;Jonathan Dibble &lt;/EM&gt;&lt;/U&gt;&lt;/STRONG&gt;has put here: &lt;A href="http://sharepoint.wanderingleaf.net/professional/Lists/Posts/Post.aspx?ID=13" mce_href="http://sharepoint.wanderingleaf.net/professional/Lists/Posts/Post.aspx?ID=13"&gt;http://sharepoint.wanderingleaf.net/professional/Lists/Posts/Post.aspx?ID=13&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It was pleasure working with Jonathan on this project, where the Left Navigation Provider was really annoying and Jonathan with his magic solved this issue and not only solved it but also improvised it with LINQ.&lt;/P&gt;
&lt;P&gt;Great Job Jonathan&lt;/P&gt;
&lt;P mce_keep="true"&gt;Following is Jonathan Dibble's post:&lt;/P&gt;
&lt;H3 style="MARGIN: auto 0in"&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;1/17/2009&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P mce_keep="true"&gt;
&lt;TABLE class=MsoNormalTable style="BORDER-RIGHT: #bbbbbb 1pt dashed; BORDER-TOP: #bbbbbb 1pt dashed; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 100%; BORDER-BOTTOM: #bbbbbb 1pt dashed; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in; mso-cellspacing: 0in" cellSpacing=0 cellPadding=0 width="100%" border=1 class="MsoNormalTable"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: #bbbbbb; PADDING-RIGHT: 0in; BORDER-TOP: #bbbbbb; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in; BORDER-LEFT: #bbbbbb; PADDING-TOP: 0in; BORDER-BOTTOM: #bbbbbb; BACKGROUND-COLOR: transparent"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;A href="http://sharepoint.wanderingleaf.net/professional/Lists/Posts/Post.aspx?ID=13"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;Custom Navigation Provider using SharePoint List&lt;/SPAN&gt;&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Recently, i was asked to write a navigation provider that used a SharePoint List as the data source.&amp;nbsp; Since SharePoint is built upon ASP.Net, adding a new navigation provider was a fairly straightforward task.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;As always, let’s dive right into the code and work the details out from there.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: auto 0in"&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Step 1: Create the Data Source&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Let’s define a List called NavLinks.&amp;nbsp; The structure is simple:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;
&lt;TABLE class=MsoNormalTable style="BORDER-RIGHT: #bbbbbb 1pt dashed; BORDER-TOP: #bbbbbb 1pt dashed; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in; mso-cellspacing: 0in" cellSpacing=0 cellPadding=0 width=400 border=1 class="MsoNormalTable"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: #bbbbbb 1pt dashed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #bbbbbb 1pt dashed; PADDING-LEFT: 1.5pt; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; BACKGROUND-COLOR: transparent" vAlign=top width=400&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A href="http://sharepoint.wanderingleaf.net/professional/Lists/Posts/Attachments/13/Picture6_64BF49B1.jpg"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; TEXT-DECORATION: none; text-underline: none"&gt;&lt;IMG height=233 alt="Picture 6" src="file:///C:/Users/KETAAN~1.NOR/AppData/Local/Temp/msohtmlclip1/01/clip_image001.jpg" width=717 border=0 v:shapes="Picture_x0020_1"&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 1; mso-yfti-lastrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: #bbbbbb 1pt dashed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #bbbbbb 1pt dashed; PADDING-LEFT: 1.5pt; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; BACKGROUND-COLOR: transparent" vAlign=top width=400&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Figure 1&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Url, Title and Description need no explanation.&amp;nbsp; SortOrder determines the order in which to display sibling nodes.&amp;nbsp; Parent is a lookup back to this list.&amp;nbsp; This allows users to easily manipulate the tree.&amp;nbsp; After the list is built, go ahead and populate it.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;
&lt;TABLE class=MsoNormalTable style="BORDER-RIGHT: #bbbbbb 1pt dashed; BORDER-TOP: #bbbbbb 1pt dashed; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in; mso-cellspacing: 0in" cellSpacing=0 cellPadding=0 width=400 border=1 class="MsoNormalTable"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: #bbbbbb 1pt dashed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #bbbbbb 1pt dashed; PADDING-LEFT: 1.5pt; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; BACKGROUND-COLOR: transparent" vAlign=top width=400&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A href="http://sharepoint.wanderingleaf.net/professional/Lists/Posts/Attachments/13/Picture5_64BF49B1.jpg"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; TEXT-DECORATION: none; text-underline: none"&gt;&lt;IMG height=439 alt="Picture 5" src="file:///C:/Users/KETAAN~1.NOR/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg" width=968 border=0 v:shapes="Picture_x0020_2"&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 1; mso-yfti-lastrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: #bbbbbb 1pt dashed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #bbbbbb 1pt dashed; PADDING-LEFT: 1.5pt; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; BACKGROUND-COLOR: transparent" vAlign=top width=400&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Figure 2&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;First, we’ve defined a root node.&amp;nbsp; This becomes the menu starting point.&amp;nbsp; Beyond that, we have a list of nodes with a parent/child relationship.&amp;nbsp; Notice the Urls, they are relative to the current web application.&amp;nbsp; All local Urls should be entered as relative Urls.&amp;nbsp;&amp;nbsp; We’ll talk about this more when we dive into the code.&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;I added a Group By to the view to make the navigation a bit easier to follow.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;
&lt;TABLE class=MsoNormalTable style="BORDER-RIGHT: #bbbbbb 1pt dashed; BORDER-TOP: #bbbbbb 1pt dashed; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in; mso-cellspacing: 0in" cellSpacing=0 cellPadding=0 width=400 border=1 class="MsoNormalTable"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: #bbbbbb 1pt dashed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #bbbbbb 1pt dashed; PADDING-LEFT: 1.5pt; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; BACKGROUND-COLOR: transparent" vAlign=top width=400&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A href="http://sharepoint.wanderingleaf.net/professional/Lists/Posts/Attachments/13/Picture7_64BF49B1.jpg"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; TEXT-DECORATION: none; text-underline: none"&gt;&lt;IMG height=288 alt="Picture 7" src="file:///C:/Users/KETAAN~1.NOR/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg" width=965 border=0 v:shapes="Picture_x0020_3"&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 1; mso-yfti-lastrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: #bbbbbb 1pt dashed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #bbbbbb 1pt dashed; PADDING-LEFT: 1.5pt; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; BACKGROUND-COLOR: transparent" vAlign=top width=400&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Figure 3&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;H3 style="MARGIN: auto 0in"&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Verification&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Upon completion of this step, you should have a list called NavList (&lt;A href="http://yoursharepointsite/%3CPathToWeb%3E/Lists/NavList"&gt;&lt;SPAN style="FONT-SIZE: 12pt"&gt;&lt;FONT color=#0000ff&gt;http://yourSharePointSite/&amp;lt;PathToWeb&amp;gt;/Lists/NavList&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;) &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: auto 0in"&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Step 2: Create the Basic Provider&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;There are literally dozens of articles out there describing how to do this, so I am just going to glance over it briefly.&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL type=1&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l3 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Open Visual Studio 2008 (my provider uses LINQ so you need at least VS 2008 with all the latest goodies) and create a new Class Library Project.&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l3 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Add references to System.Web, System.Configuration and Microsoft.SharePoint if not already present. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l3 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Create a new class using System.Web.SiteMapProvider as the base class.&amp;nbsp; Don’t bother with any code just yet, just create the skeleton class. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l3 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Sign the Assembly. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l3 level1 lfo1; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Build and Deploy to GAC.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;What we’re doing here is just creating something that compiles so we can get the public key and finish configuring SharePoint.&amp;nbsp; A tip I like to do is use Post-Build commands to help us out.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;
&lt;TABLE class=MsoNormalTable style="BORDER-RIGHT: #bbbbbb 1pt dashed; BORDER-TOP: #bbbbbb 1pt dashed; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in; mso-cellspacing: 0in" cellSpacing=0 cellPadding=0 width=400 border=1 class="MsoNormalTable"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: #bbbbbb 1pt dashed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #bbbbbb 1pt dashed; PADDING-LEFT: 1.5pt; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; BACKGROUND-COLOR: transparent" vAlign=top width=400&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A href="http://sharepoint.wanderingleaf.net/professional/Lists/Posts/Attachments/13/Picture1_037E6311.jpg"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; TEXT-DECORATION: none; text-underline: none"&gt;&lt;IMG height=387 alt="Picture 1" src="file:///C:/Users/KETAAN~1.NOR/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg" width=732 border=0 v:shapes="Picture_x0020_4"&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 1; mso-yfti-lastrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: #bbbbbb 1pt dashed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #bbbbbb 1pt dashed; PADDING-LEFT: 1.5pt; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; BACKGROUND-COLOR: transparent" vAlign=top width=400&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Figure 4&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;What this does is uninstall the existing assembly (/u), installs the new assembly (/i) and restarts the SharePoint application pool (iisapp.)&amp;nbsp; You will have to change the 3rd statement to match your app pool.&amp;nbsp; Run IISAPP with no command lines to get a list of running application pools.&amp;nbsp; Once you build your DLL, everything should be registered and the build output should show the public key name .&amp;nbsp; Really, the only slightly irky thing is you have to build twice to get the public key.&amp;nbsp; GacUtil only shows the key when you are uninstalling, not when you are installing.&amp;nbsp; No biggie.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;
&lt;TABLE class=MsoNormalTable style="BORDER-RIGHT: #bbbbbb 1pt dashed; BORDER-TOP: #bbbbbb 1pt dashed; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in; mso-cellspacing: 0in" cellSpacing=0 cellPadding=0 width=400 border=1 class="MsoNormalTable"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: #bbbbbb 1pt dashed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #bbbbbb 1pt dashed; PADDING-LEFT: 1.5pt; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; BACKGROUND-COLOR: transparent" vAlign=top width=400&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A href="http://sharepoint.wanderingleaf.net/professional/Lists/Posts/Attachments/13/Picture3_037E6311.jpg"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; TEXT-DECORATION: none; text-underline: none"&gt;&lt;IMG height=225 alt="Picture 3" src="file:///C:/Users/KETAAN~1.NOR/AppData/Local/Temp/msohtmlclip1/01/clip_image005.jpg" width=888 border=0 v:shapes="Picture_x0020_5"&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 1; mso-yfti-lastrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: #bbbbbb 1pt dashed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #bbbbbb 1pt dashed; PADDING-LEFT: 1.5pt; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; BACKGROUND-COLOR: transparent" vAlign=top width=400&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Figure 5&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;H3 style="MARGIN: auto 0in"&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Verification&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;At the end of step 2, you should have a DLL that compiles and registered in the GAC.&amp;nbsp; You should have the type name (your class name) and the assembly name (the name of the DLL) and you should also have the public key from the assembly (output from the build.)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3 style="MARGIN: auto 0in"&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Step 3: Register the Provider with SharePoint&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;This one is actually pretty quick and easy. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL type=1&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo2; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Open the web.config for your SharePoint site. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo2; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Search for the siteMap node. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo2; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Add your entry.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN class=lnum2&gt;&amp;nbsp;&amp;nbsp; 1:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd2&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html2&gt;siteMap&lt;/SPAN&gt; &lt;SPAN class=attr2&gt;defaultProvider&lt;/SPAN&gt;&lt;SPAN class=kwrd2&gt;="CurrentNavSiteMapProvider"&lt;/SPAN&gt; &lt;SPAN class=attr2&gt;enabled&lt;/SPAN&gt;&lt;SPAN class=kwrd2&gt;="true"&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum2&gt;&amp;nbsp;&amp;nbsp; 2:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd2&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html2&gt;providers&lt;/SPAN&gt;&lt;SPAN class=kwrd2&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum2&gt;&amp;nbsp;&amp;nbsp; 3:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;4:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem2&gt;&amp;lt;!-- &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;5:&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=rem2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CacheTimeout = How long to keep in cache&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum2&gt;&amp;nbsp;&amp;nbsp; 6:&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=rem2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HideCousins = Display Cousins?&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum2&gt;&amp;nbsp;&amp;nbsp; 7:&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=rem2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HideNephews = Display Nephews?&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum2&gt;&amp;nbsp;&amp;nbsp; 8:&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=rem2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NavListUrl = The Site Collection relative navigation list.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum2&gt;&amp;nbsp;&amp;nbsp; 9:&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=rem2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum2&gt;&amp;nbsp; 10: &amp;nbsp;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd2&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html2&gt;add&lt;/SPAN&gt; &lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum2&gt;&amp;nbsp;&amp;nbsp;11:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=attr2&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd2&gt;="SPListNavigationProvider"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum2&gt;&amp;nbsp; 12:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=attr2&gt;type&lt;/SPAN&gt;&lt;SPAN class=kwrd2&gt;="JGD.Web.SPListNavigationProvider, SPListNavigationProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=060e356544c1c245"&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum2&gt;&amp;nbsp;&amp;nbsp;13:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=attr2&gt;CacheTimeout&lt;/SPAN&gt;&lt;SPAN class=kwrd2&gt;="1"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum2&gt;&amp;nbsp; 14:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=attr2&gt;HideCousins&lt;/SPAN&gt;&lt;SPAN class=kwrd2&gt;="True"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum2&gt;&amp;nbsp; 15:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=attr2&gt;HideNephews&lt;/SPAN&gt;&lt;SPAN class=kwrd2&gt;="True"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum2&gt;&amp;nbsp; 16:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=attr2&gt;NavListUrl&lt;/SPAN&gt;&lt;SPAN class=kwrd2&gt;="Lists/NavList"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum2&gt;&amp;nbsp; 17:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=attr2&gt;IgnoreQuery&lt;/SPAN&gt;&lt;SPAN class=kwrd2&gt;="True"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum2&gt;&amp;nbsp; 18:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd2&gt;/&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum2&gt;&amp;nbsp; 19:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum2&gt;&amp;nbsp;&amp;nbsp;20:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd2&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html2&gt;add&lt;/SPAN&gt; &lt;SPAN class=attr2&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd2&gt;="SPNavigationProvider"&lt;/SPAN&gt; &lt;SPAN class=attr2&gt;type&lt;/SPAN&gt;&lt;SPAN class=kwrd2&gt;="Microsoft.SharePoint.Navigation.SPNavigationProvider, Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"&lt;/SPAN&gt; &lt;SPAN class=kwrd2&gt;/&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Lines 1,2 and 20 already exist and are shown so you know where to insert the custom code.&amp;nbsp; The good bits are lines 10-18.&amp;nbsp; Line 11 is the provider name, can be whatever you want, just remember what is is as you will use it on whatever pages you want to use this provider.&amp;nbsp; Line 12, that’s our provider.&amp;nbsp; The first part is the type name, second part assembly name, and the 3rd is our public key.&amp;nbsp; Lines 13-17 are custom properties for our provider.&amp;nbsp; Go ahead and add them now, it won’t harm anything.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3 style="MARGIN: auto 0in"&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Verification&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;At this point, you should have a modified web.config file.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;
&lt;TABLE class=MsoNormalTable style="WIDTH: 100%; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in; mso-cellspacing: 0in" cellSpacing=0 cellPadding=0 width="100%" border=1 class="MsoNormalTable"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: #f0f0f0; PADDING-RIGHT: 0.75pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 37.5pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #f0f0f0; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #f0f0f0; BACKGROUND-COLOR: transparent"&gt;
&lt;H4 style="MARGIN: auto 0in"&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Sidebar: Cousins and Nephews?&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;The Publishing Provider has some nice features.&amp;nbsp; For example, when you are on a Node, it shows you just that node downward, so only the selected node’s siblings and children.&amp;nbsp; To mimic this behavior, I added some properties, HideNephews and HideChildren.&amp;nbsp; I suppose I could have simplified it with a ShowOnlyDescendants property, but I didn’t.&amp;nbsp; You can fix it later.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5 style="MARGIN: auto 0in"&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Example hierarchy&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/H5&gt;
&lt;UL type=disc&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l2 level1 lfo3; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Root &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;UL type=circle&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l2 level2 lfo3; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;P1 &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;UL type=square&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l2 level3 lfo3; tab-stops: list 1.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;S1.1 &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l2 level3 lfo3; tab-stops: list 1.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;S1.2 &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l2 level3 lfo3; tab-stops: list 1.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;S1.3&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l2 level2 lfo3; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;P2 &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;UL type=square&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l2 level3 lfo3; tab-stops: list 1.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;S2.1 &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l2 level3 lfo3; tab-stops: list 1.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;S2.2&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l2 level2 lfo3; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;P3 &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;UL type=square&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l2 level3 lfo3; tab-stops: list 1.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;S3.1 &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l2 level3 lfo3; tab-stops: list 1.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;S3.2 &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l2 level3 lfo3; tab-stops: list 1.5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;S3.3&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Here we see all the S nodes are cousins to each other.&amp;nbsp; All the P nodes are also cousins.&amp;nbsp; The S nodes are also nephews to their non-parent nodes (S2 is a nephew to P1 and P3 and a child of P2.)&amp;nbsp; What this means is if we are on Node P1, we will only see the S1 nodes (and siblings of P1) if HideNephews is true.&amp;nbsp; If we are on node S3 and HideCousins is true, we will only see the siblings of S3 and the parent of S3 (P3) and the siblings of the Parent (P2 and P1) but not the children of the siblings of the parent (we will not see S2.x or S1.x)&amp;nbsp; Confused?&amp;nbsp; Well try it out and see.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: auto 0in"&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Step 4: The Magic&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;To make all this happen, we’re going to:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL type=disc&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo4; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Configure the Provider upon application startup &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo4; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Define an in-memory record reflecting each SharePoint List Item &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo4; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Read the items from the SharePoint List when the provider is called &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo4; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Cache the items for &lt;EM&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'"&gt;x&lt;/SPAN&gt;&lt;/EM&gt; minutes for performance reasons &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo4; tab-stops: list .5in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Use LINQ to query our in memory collection of Nodes&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Let’s take each task in Sequence.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5 style="MARGIN: auto 0in"&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Configure the Provider upon application startup&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;First thing we need to do is define some variables to hold our configuration values:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp;&amp;nbsp; 1:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp;&amp;nbsp; 2:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// Config key name for CacheTimeout option.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp;&amp;nbsp; 3:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp;&amp;nbsp; 4:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd4&gt;const&lt;/SPAN&gt; &lt;SPAN class=kwrd4&gt;string&lt;/SPAN&gt; CACHETIMEOUT = &lt;SPAN class=str3&gt;"CacheTimeout"&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp;&amp;nbsp; 5:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp;&amp;nbsp; 6:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp;&amp;nbsp; 7:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// Config key name for HideNephews option.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp;&amp;nbsp; 8:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp;&amp;nbsp; 9:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd4&gt;const&lt;/SPAN&gt; &lt;SPAN class=kwrd4&gt;string&lt;/SPAN&gt; HIDENEPHEWS = &lt;SPAN class=str3&gt;"HideNephews"&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 10:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 11:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 12:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// Config key name for HideCousins option.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 13:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 14:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd4&gt;const&lt;/SPAN&gt; &lt;SPAN class=kwrd4&gt;string&lt;/SPAN&gt; HIDECOUSINS = &lt;SPAN class=str3&gt;"HideCousins"&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 15:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 16:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 17:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// Config key name for NavListUrl option.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 18:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 19:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd4&gt;const&lt;/SPAN&gt; &lt;SPAN class=kwrd4&gt;string&lt;/SPAN&gt; NAVLISTURL = &lt;SPAN class=str3&gt;"NavListUrl"&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 20:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 21:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 22:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// Config key name for the IgnoreQuery option.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 23:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 24:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd4&gt;const&lt;/SPAN&gt; &lt;SPAN class=kwrd4&gt;string&lt;/SPAN&gt; IGNOREQUERY = &lt;SPAN class=str3&gt;"IgnoreQuery"&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 25:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 26:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 27:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// Gets/Sets the number of minutes to cache the nodes.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 28:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// in memory.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 29:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 30:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd4&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd4&gt;double&lt;/SPAN&gt; CacheTimeout { get; set; }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 31:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 32:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 33:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// Gets/Sets the value used to sort the in memory dataset.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 34:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 35:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd4&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd4&gt;string&lt;/SPAN&gt; SortOrder { get; set; }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 36:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 37:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 38:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// Determines if nephews are hidden.&amp;nbsp; If true, provider&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 39:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// will only return the current node, children of the current node&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 40:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// and siblings of the current node.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 41:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 42:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd4&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd4&gt;bool&lt;/SPAN&gt; HideNephews { get; set; }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 43:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 44:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 45:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// Determines if cousins are hidden.&amp;nbsp; If true, cousin nodes&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 46:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// will not be shown.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 47:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 48:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd4&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd4&gt;bool&lt;/SPAN&gt; HideCousins { get; set; }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 49:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 50:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 51:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// Gets/Sets the Url used to drive list navigation.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 52:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// Once cached, the nodes are not re-read, even if this&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 53:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// value changes.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 54:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 55:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd4&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd4&gt;string&lt;/SPAN&gt; NavListUrl { get; set; }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 56:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 57:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 58:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// Determines if the Query (?...) is igniored when doing a node lookup&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 59:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem4&gt;/// &amp;lt;/summary&amp;gt;.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum4&gt;&amp;nbsp; 60:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd4&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd4&gt;bool&lt;/SPAN&gt; IgnoreQuery { get; set; }&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;We’re using the new get; set; goodies from .Net 3.0.&amp;nbsp; This will automagically generate the properties for us.&amp;nbsp; Now we need to set the values upon initialization.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp;&amp;nbsp; 1:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem6&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp;&amp;nbsp; 2:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem6&gt;/// Sets up the provider.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp;&amp;nbsp; 3:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem6&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp;&amp;nbsp; 4:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem6&gt;/// &amp;lt;param name="name"&amp;gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp;&amp;nbsp; 5:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem6&gt;/// &amp;lt;param name="config"&amp;gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp;&amp;nbsp; 6:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd6&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd6&gt;override&lt;/SPAN&gt; &lt;SPAN class=kwrd6&gt;void&lt;/SPAN&gt; Initialize(&lt;SPAN class=kwrd6&gt;string&lt;/SPAN&gt; name, &lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;7:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Collections.Specialized.NameValueCollection providerConfig) {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp;&amp;nbsp; 8:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Mark();&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp;&amp;nbsp; 9:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 10:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CacheTimeout = tryParse(providerConfig[CACHETIMEOUT], 1.0);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 11:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp;&amp;nbsp;12:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HideNephews = tryParse(providerConfig[HIDENEPHEWS], &lt;SPAN class=kwrd6&gt;true&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 13:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HideCousins = tryParse(providerConfig[HIDECOUSINS], &lt;SPAN class=kwrd6&gt;true&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 14:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 15:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IgnoreQuery = tryParse(providerConfig[IGNOREQUERY], &lt;SPAN class=kwrd6&gt;true&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 16:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 17:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NavListUrl = getValue(providerConfig[NAVLISTURL], &lt;SPAN class=str5&gt;"Lists/NavList"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 18:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 19:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 20:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd6&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd6&gt;bool&lt;/SPAN&gt; tryParse(&lt;SPAN class=kwrd6&gt;string&lt;/SPAN&gt; &lt;SPAN class=kwrd6&gt;value&lt;/SPAN&gt;, &lt;SPAN class=kwrd6&gt;bool&lt;/SPAN&gt; defaultValue)&amp;nbsp; {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 21:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd6&gt;bool&lt;/SPAN&gt; retVal;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 22:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd6&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd6&gt;bool&lt;/SPAN&gt;.TryParse(&lt;SPAN class=kwrd6&gt;value&lt;/SPAN&gt;, &lt;SPAN class=kwrd6&gt;out&lt;/SPAN&gt; retVal) ? retVal : defaultValue;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 23:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 24:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 25:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd6&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd6&gt;double&lt;/SPAN&gt; tryParse(&lt;SPAN class=kwrd6&gt;string&lt;/SPAN&gt; &lt;SPAN class=kwrd6&gt;value&lt;/SPAN&gt;, &lt;SPAN class=kwrd6&gt;double&lt;/SPAN&gt; defaultValue) {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 26:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd6&gt;double&lt;/SPAN&gt; retVal;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 27: &amp;nbsp;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd6&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd6&gt;double&lt;/SPAN&gt;.TryParse(&lt;SPAN class=kwrd6&gt;value&lt;/SPAN&gt;, &lt;SPAN class=kwrd6&gt;out&lt;/SPAN&gt; retVal) ? retVal : defaultValue;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 28:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 29:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 30:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd6&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd6&gt;string&lt;/SPAN&gt; getValue(&lt;SPAN class=kwrd6&gt;object&lt;/SPAN&gt; &lt;SPAN class=kwrd6&gt;value&lt;/SPAN&gt;, &lt;SPAN class=kwrd6&gt;string&lt;/SPAN&gt; defaultValue) {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 31:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd6&gt;if&lt;/SPAN&gt; (&lt;SPAN class=kwrd6&gt;value&lt;/SPAN&gt; == &lt;SPAN class=kwrd6&gt;null&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 32:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd6&gt;return&lt;/SPAN&gt; defaultValue;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 33:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 34:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd6&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd6&gt;value&lt;/SPAN&gt;.ToString();&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum6&gt;&amp;nbsp; 35:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Initialize is one of the routines provided by the base class.&amp;nbsp; We’re passed a name value collection and we assign our properties.&amp;nbsp; You can ignore line 8, that is for debugging.&amp;nbsp; See the full source to see what that line does.&amp;nbsp; tryParse is a helper function which will either return the value from the config file or a default value if the desired key doesn’t exist.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5 style="MARGIN: auto 0in"&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Define an in-memory record reflecting each SharePoint List Item&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/H5&gt;&lt;PRE&gt;&lt;SPAN class=lnum8&gt;&amp;nbsp;&amp;nbsp; 1:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd8&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd8&gt;class&lt;/SPAN&gt; SPListItemSiteNode {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum8&gt;&amp;nbsp;&amp;nbsp; 2:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd8&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd8&gt;string&lt;/SPAN&gt; Key { get; set; }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum8&gt;&amp;nbsp;&amp;nbsp; 3:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd8&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd8&gt;string&lt;/SPAN&gt; Title { get; set; }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum8&gt;&amp;nbsp;&amp;nbsp; 4:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd8&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd8&gt;string&lt;/SPAN&gt; Description { get; set; }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum8&gt;&amp;nbsp;&amp;nbsp; 5:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd8&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd8&gt;string&lt;/SPAN&gt; Url { get; set; }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum8&gt;&amp;nbsp;&amp;nbsp; 6:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd8&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd8&gt;double&lt;/SPAN&gt; SortOrder { get; set; }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum8&gt;&amp;nbsp;&amp;nbsp; 7:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd8&gt;public&lt;/SPAN&gt; SiteMapNode SiteMapNode { get; set; }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum8&gt;&amp;nbsp;&amp;nbsp; 8:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum8&gt;&amp;nbsp;&amp;nbsp; 9:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd8&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd8&gt;string&lt;/SPAN&gt; ParentKey { get; set; }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum8&gt;&amp;nbsp; 10:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd8&gt;public&lt;/SPAN&gt; SPListItemSiteNode Parent { get; set; }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum8&gt; &amp;nbsp;11:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;This is a very simple class that contains the properties we need to build our navigation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5 style="MARGIN: auto 0in"&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Read the items from the SharePoint List when the provider is called&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/H5&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp;&amp;nbsp; 1:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem9&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp;&amp;nbsp; 2:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem9&gt;/// Reads the node from a SharePoint list and return it as a List&amp;lt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp;&amp;nbsp; 3:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem9&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp;&amp;nbsp; 4:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem9&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp;&amp;nbsp; 5:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd10&gt;private&lt;/SPAN&gt; List&amp;lt;SPListItemSiteNode&amp;gt; buildNodeTree() {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp;&amp;nbsp; 6:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp;&amp;nbsp; 7:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var nodeIMDB = &lt;SPAN class=kwrd10&gt;new&lt;/SPAN&gt; List&amp;lt;SPListItemSiteNode&amp;gt;();&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp;&amp;nbsp; 8:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp;&amp;nbsp; 9:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd10&gt;string&lt;/SPAN&gt; navListUrl = NavListUrl;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 10:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 11:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Microsoft.SharePoint.SPContext spContext = Microsoft.SharePoint.SPContext.Current;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 12:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem9&gt;//Don't dispose of this object - we didn't create it, we don't destroy it.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 13:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Microsoft.SharePoint.SPSite currentSite = spContext.Site;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 14:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 15:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd10&gt;using&lt;/SPAN&gt; (SPWeb listWeb = currentSite.OpenWeb(navListUrl, &lt;SPAN class=kwrd10&gt;false&lt;/SPAN&gt;)) {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 16:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 17:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SPList navList = listWeb.GetList(listWeb.ServerRelativeUrl + &lt;SPAN class=str8&gt;"/"&lt;/SPAN&gt; + navListUrl);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 18:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 19:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd10&gt;if&lt;/SPAN&gt; (navList != &lt;SPAN class=kwrd10&gt;null&lt;/SPAN&gt;) {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 20:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 21:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem9&gt;//Future functionality: appending the navlist url &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp;&amp;nbsp;22:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem9&gt;//so we can aggregate multiple lists.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 23:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd10&gt;string&lt;/SPAN&gt; keyPrefix = navListUrl;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 24:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 25:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd10&gt;foreach&lt;/SPAN&gt; (SPListItem listItem &lt;SPAN class=kwrd10&gt;in&lt;/SPAN&gt; navList.Items) {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 26:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var newNode = &lt;SPAN class=kwrd10&gt;new&lt;/SPAN&gt; SPListItemSiteNode() {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 27:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Title = listItem.Title,&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 28:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Description = getValue(listItem[&lt;SPAN class=str8&gt;"Description"&lt;/SPAN&gt;], &lt;SPAN class=kwrd10&gt;string&lt;/SPAN&gt;.Empty),&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 29:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Url = listItem[&lt;SPAN class=str8&gt;"Url"&lt;/SPAN&gt;].ToString().ToLower(),&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 30:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Key = keyPrefix + listItem.ID.ToString(),&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 31:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SortOrder = (Double)listItem[&lt;SPAN class=str8&gt;"SortOrder"&lt;/SPAN&gt;],&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 32:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ParentKey = listItem[&lt;SPAN class=str8&gt;"Parent"&lt;/SPAN&gt;] == &lt;SPAN class=kwrd10&gt;null&lt;/SPAN&gt; ? ROOTID : &lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp;&amp;nbsp;33:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;keyPrefix + (listItem[&lt;SPAN class=str8&gt;"Parent"&lt;/SPAN&gt;] &lt;SPAN class=kwrd10&gt;as&lt;/SPAN&gt; &lt;SPAN class=kwrd10&gt;string&lt;/SPAN&gt;).Split(&lt;SPAN class=str8&gt;';'&lt;/SPAN&gt;)[0]&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 34:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 35:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 36:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;newNode.SiteMapNode = &lt;SPAN class=kwrd10&gt;new&lt;/SPAN&gt; SiteMapNode(&lt;SPAN class=kwrd10&gt;this&lt;/SPAN&gt;, newNode.Key, newNode.Url, newNode.Title, newNode.Description);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 37:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nodeIMDB.Add(newNode);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 38:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 39:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 40:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem9&gt;//Set Parents&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 41:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd10&gt;foreach&lt;/SPAN&gt; (var row &lt;SPAN class=kwrd10&gt;in&lt;/SPAN&gt; nodeIMDB) &lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp;&amp;nbsp;42:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd10&gt;if&lt;/SPAN&gt; (row.ParentKey != ROOTID) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp;&amp;nbsp;43:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem9&gt;//Look for the parent row&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 44:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var parentRow = nodeIMDB.Find(n =&amp;gt; n.Key == row.ParentKey);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 45:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 46:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;row.Parent = parentRow;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 47:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;row.SiteMapNode.ParentNode = parentRow.SiteMapNode;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 48:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 49:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 50:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 51:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 52:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd10&gt;return&lt;/SPAN&gt; nodeIMDB;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum10&gt;&amp;nbsp; 53:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;This is fairly straightforward, read from the SharePoint list, load it into the List&amp;lt;&amp;gt; object and return it.&amp;nbsp; The only thing slightly funky is the two-pass reader to set the parents.&amp;nbsp; Before we can build the tree, we have to have all the nodes loaded, which is why we have it in two loops.&amp;nbsp; Also check out line 44, we’re using a Lambda expression to go and find the parent row.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5 style="MARGIN: auto 0in"&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Cache the items for &lt;EM&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'"&gt;x&lt;/SPAN&gt;&lt;/EM&gt; minutes for performance reasons&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/H5&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;To achieve this, we’re going to create a public property which calls our buildNodeTree function and stores the result.&amp;nbsp; As the provider runs, it will access this property which will be responsible for the caching.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp;&amp;nbsp; 1:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem11&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp;&amp;nbsp; 2:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem11&gt;/// Returns the Cached Nodes list.&amp;nbsp; &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;3:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem11&gt;/// The nodes are read from the SPList and then caches the results for better&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp;&amp;nbsp; 4:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem11&gt;/// performance.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp;&amp;nbsp; 5:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem11&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp;&amp;nbsp; 6:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd12&gt;public&lt;/SPAN&gt; List&amp;lt;SPListItemSiteNode&amp;gt; AllNodes {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp;&amp;nbsp; 7:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;get {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp;&amp;nbsp; 8:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;attach();&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp;&amp;nbsp; 9:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 10:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem11&gt;//Build our cached key.&amp;nbsp; We use the provider name in case we loaded&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 11:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem11&gt;//multiple copies&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 12:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd12&gt;string&lt;/SPAN&gt; cacheKey = &lt;SPAN class=kwrd12&gt;this&lt;/SPAN&gt;.Name + &lt;SPAN class=str10&gt;"allNodes"&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 13:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 14:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var nodes = (List&amp;lt;SPListItemSiteNode&amp;gt;)HttpContext.Current.Cache[cacheKey];&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 15:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 16:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd12&gt;if&lt;/SPAN&gt; (nodes == &lt;SPAN class=kwrd12&gt;null&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 17:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem11&gt;//Simple double check lock to update cache&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 18:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd12&gt;lock&lt;/SPAN&gt; (HttpContext.Current.Cache) {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 19:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nodes = (List&amp;lt;SPListItemSiteNode&amp;gt;)HttpContext.Current.Cache[cacheKey];&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 20:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd12&gt;if&lt;/SPAN&gt; (nodes == &lt;SPAN class=kwrd12&gt;null&lt;/SPAN&gt;) {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 21:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nodes = buildNodeTree();&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 22:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HttpContext.Current.Cache.Add(cacheKey, nodes, &lt;SPAN class=kwrd12&gt;null&lt;/SPAN&gt;,&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 23:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DateTime.Now.AddMinutes(CacheTimeout),&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 24:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Normal, &lt;SPAN class=kwrd12&gt;null&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 25:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 26:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp;&amp;nbsp;27:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 28:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 29:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd12&gt;return&lt;/SPAN&gt; nodes;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 30:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 31:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;You can ignore line 8, that’s some debug code to attach the debugger, if you’d like to see it, check out the full source.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Now we can leverage the AllNodes everywhere and not worry about caching anywhere else.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H5 style="MARGIN: auto 0in"&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Use LINQ to query our in memory collection of Nodes&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/H5&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp;&amp;nbsp; 1:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem11&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp;&amp;nbsp; 2:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem11&gt;/// Returns the root node&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp;&amp;nbsp; 3:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem11&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp;&amp;nbsp; 4:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem11&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp;&amp;nbsp; 5:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd12&gt;protected&lt;/SPAN&gt; &lt;SPAN class=kwrd12&gt;override&lt;/SPAN&gt; SiteMapNode GetRootNodeCore() {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp;&amp;nbsp; 6:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Mark();&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp;&amp;nbsp; 7:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp;&amp;nbsp; 8:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem11&gt;//Find the node with no parent&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp;&amp;nbsp; 9:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SiteMapNode rootNode = AllNodes.First&amp;lt;SPListItemSiteNode&amp;gt;(n =&amp;gt; n.Parent == &lt;SPAN class=kwrd12&gt;null&lt;/SPAN&gt;).SiteMapNode;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 10:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp;&amp;nbsp;11:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rootNode.ParentNode = &lt;SPAN class=kwrd12&gt;null&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 12:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 13:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd12&gt;return&lt;/SPAN&gt; rootNode;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum12&gt;&amp;nbsp; 14:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp;&amp;nbsp; 1:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem14&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp;&amp;nbsp; 2:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem14&gt;/// Given the URL, finds the appropriate node.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp;&amp;nbsp; 3:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem14&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp;&amp;nbsp; 4:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem14&gt;/// &amp;lt;param name="rawUrl"&amp;gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp;&amp;nbsp; 5:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem14&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp;&amp;nbsp; 6:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd15&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd15&gt;override&lt;/SPAN&gt; SiteMapNode FindSiteMapNode(&lt;SPAN class=kwrd15&gt;string&lt;/SPAN&gt; rawUrl) {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp;&amp;nbsp; 7:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Mark(rawUrl);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp;&amp;nbsp; 8:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp;&amp;nbsp; 9:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rawUrl = rawUrl.ToLower();&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp; 10:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp; 11:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd15&gt;if&lt;/SPAN&gt; (IgnoreQuery &amp;amp;&amp;amp; rawUrl.Contains(&lt;SPAN class=str13&gt;'?'&lt;/SPAN&gt;)) {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp; 12:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd15&gt;int&lt;/SPAN&gt; offset = rawUrl.IndexOf(&lt;SPAN class=str13&gt;'?'&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp; 13:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rawUrl = rawUrl.Substring(0, offset);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp; 14:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp; 15:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp; 16:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd15&gt;try&lt;/SPAN&gt; {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp; 17:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var row = AllNodes.First&amp;lt;SPListItemSiteNode&amp;gt;(i =&amp;gt; i.Url.Contains(rawUrl));&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp; 18:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp;&amp;nbsp;19:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd15&gt;return&lt;/SPAN&gt; row.SiteMapNode;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp; 20:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp;&amp;nbsp;21:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;SPAN class=kwrd15&gt;catch&lt;/SPAN&gt; {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp; 22:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd15&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd15&gt;null&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp; 23:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum15&gt;&amp;nbsp; 24:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN class=lnum17&gt;&amp;nbsp;&amp;nbsp; 1:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem16&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum17&gt;&amp;nbsp;&amp;nbsp; 2:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem16&gt;/// Given a node, return the parent node.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum17&gt;&amp;nbsp;&amp;nbsp; 3:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem16&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum17&gt;&amp;nbsp;&amp;nbsp; 4:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem16&gt;/// &amp;lt;param name="node"&amp;gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum17&gt;&amp;nbsp;&amp;nbsp; 5:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem16&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum17&gt;&amp;nbsp;&amp;nbsp; 6:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd17&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd17&gt;override&lt;/SPAN&gt; SiteMapNode GetParentNode(SiteMapNode node) {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum17&gt;&amp;nbsp;&amp;nbsp; 7:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Mark(node);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum17&gt;&amp;nbsp;&amp;nbsp; 8:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum17&gt;&amp;nbsp;&amp;nbsp; 9:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var row = AllNodes.First&amp;lt;SPListItemSiteNode&amp;gt;(n =&amp;gt; n.Key == node.Key);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum17&gt;&amp;nbsp; 10:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum17&gt;&amp;nbsp; 11:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd17&gt;if&lt;/SPAN&gt; (row.Parent == &lt;SPAN class=kwrd17&gt;null&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum17&gt;&amp;nbsp; 12:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd17&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd17&gt;null&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum17&gt;&amp;nbsp; 13:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd17&gt;else&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum17&gt;&amp;nbsp; 14:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd17&gt;return&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum17&gt;&amp;nbsp; 15: &amp;nbsp;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AllNodes.First&amp;lt;SPListItemSiteNode&amp;gt;(n =&amp;gt; n.Parent.SiteMapNode == node).SiteMapNode;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum17&gt;&amp;nbsp; 16:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp;&amp;nbsp; 1:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem18&gt;/// &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp;&amp;nbsp; 2:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem18&gt;/// Gets all children for a specific node&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp;&amp;nbsp; 3:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem18&gt;/// &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp;&amp;nbsp; 4:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem18&gt;/// &amp;lt;param name="node"&amp;gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp;&amp;nbsp; 5:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem18&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp;&amp;nbsp; 6:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd19&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd19&gt;override&lt;/SPAN&gt; SiteMapNodeCollection GetChildNodes(SiteMapNode node) {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp;&amp;nbsp; 7:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp;&amp;nbsp; 8:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Mark(node.Title);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp;&amp;nbsp; 9:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 10:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SiteMapNodeCollection childNodes = &lt;SPAN class=kwrd19&gt;new&lt;/SPAN&gt; SiteMapNodeCollection();&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 11:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 12:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem18&gt;//Don't show nephew nodes -&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 13:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd19&gt;if&lt;/SPAN&gt; (HideNephews &amp;amp;&amp;amp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 14:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;node.ParentNode == CurrentNode.ParentNode &amp;amp;&amp;amp; node != CurrentNode) {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 15:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd19&gt;return&lt;/SPAN&gt; childNodes;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 16:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 17:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 18:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem18&gt;//Don't show cousins&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 19:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd19&gt;if&lt;/SPAN&gt; (HideCousins &amp;amp;&amp;amp; node != CurrentNode) {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 20:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SiteMapNode myParent = CurrentNode.ParentNode;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 21:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 22:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd19&gt;if&lt;/SPAN&gt; (myParent != &lt;SPAN class=kwrd19&gt;null&lt;/SPAN&gt;) {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 23:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SiteMapNode myGrandparent = myParent.ParentNode;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 24:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 25:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd19&gt;if&lt;/SPAN&gt; (myGrandparent != &lt;SPAN class=kwrd19&gt;null&lt;/SPAN&gt; &amp;amp;&amp;amp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 26:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(node.IsDescendantOf(myGrandparent) &amp;amp;&amp;amp; node != myParent))&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 27:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd19&gt;return&lt;/SPAN&gt; childNodes;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 28:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp;&amp;nbsp;29:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 30:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 31:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp;&amp;nbsp;32:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=rem18&gt;///Find all nodes with this parent&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 33:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var childRows = from n &lt;SPAN class=kwrd19&gt;in&lt;/SPAN&gt; AllNodes&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 34:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd19&gt;where&lt;/SPAN&gt; n.Parent != &lt;SPAN class=kwrd19&gt;null&lt;/SPAN&gt; &amp;amp;&amp;amp; n.Parent.SiteMapNode == node&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 35:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;orderby n.SortOrder&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 36:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;select n;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 37:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 38:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd19&gt;if&lt;/SPAN&gt; (childRows != &lt;SPAN class=kwrd19&gt;null&lt;/SPAN&gt;) {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 39:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd19&gt;foreach&lt;/SPAN&gt; (var childRow &lt;SPAN class=kwrd19&gt;in&lt;/SPAN&gt; childRows) {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 40:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;childNodes.Add(childRow.SiteMapNode);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 41:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;childRow.SiteMapNode.ParentNode = node;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 42:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 43:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 44:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 45:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class=kwrd19&gt;return&lt;/SPAN&gt; childNodes;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum19&gt;&amp;nbsp; 46:&amp;nbsp; &lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Lines 33-36 do the most work.&amp;nbsp; It’s our LINQ query to return the nodes for this parent. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;That’s It!&amp;nbsp; We now have our provider.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3 style="MARGIN: auto 0in"&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Verification&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;At this point, the code for the provider is complete, everything should compile and deploy to the GAC.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: auto 0in"&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; mso-fareast-font-family: 'Times New Roman'"&gt;Step 5: Put it to use&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Add the following code to a master page, or wherever you’d like to use it.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;
&lt;TABLE class=MsoNormalTable style="BORDER-RIGHT: #bbbbbb 1pt dashed; BORDER-TOP: #bbbbbb 1pt dashed; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in; mso-cellspacing: 0in" cellSpacing=0 cellPadding=0 width=400 border=1 class="MsoNormalTable"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: #bbbbbb 1pt dashed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #bbbbbb 1pt dashed; PADDING-LEFT: 1.5pt; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; BACKGROUND-COLOR: transparent" vAlign=top width=400&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A href="http://sharepoint.wanderingleaf.net/professional/Lists/Posts/Attachments/13/Picture3_1_316BB5C9.jpg"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; TEXT-DECORATION: none; text-underline: none"&gt;&lt;IMG height=335 alt="Picture 3" src="file:///C:/Users/KETAAN~1.NOR/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg" width=701 border=0 v:shapes="Picture_x0020_6"&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 1; mso-yfti-lastrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: #bbbbbb 1pt dashed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #bbbbbb 1pt dashed; PADDING-LEFT: 1.5pt; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; BACKGROUND-COLOR: transparent" vAlign=top width=400&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Figure 6&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;The key control is the SiteMapDataSource.&amp;nbsp; That acts as the glue between our provider and the AspMenu control.&amp;nbsp; The SMDS also allows us to change the starting node and adds some other UI based functionality (like ShowStartingNode.)&amp;nbsp; Try playing around with it and see how it affects the UI.&amp;nbsp; Pay attention to that StartingNodeOffset.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;When it’s all said and done, lets see a page with it in action.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;
&lt;TABLE class=MsoNormalTable style="BORDER-RIGHT: #bbbbbb 1pt dashed; BORDER-TOP: #bbbbbb 1pt dashed; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in; mso-cellspacing: 0in" cellSpacing=0 cellPadding=0 width=400 border=1 class="MsoNormalTable"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: #bbbbbb 1pt dashed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #bbbbbb 1pt dashed; PADDING-LEFT: 1.5pt; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; BACKGROUND-COLOR: transparent" vAlign=top width=400&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A href="http://sharepoint.wanderingleaf.net/professional/Lists/Posts/Attachments/13/Picture1_2_316BB5C9.jpg"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; TEXT-DECORATION: none; text-underline: none"&gt;&lt;IMG height=530 alt="Picture 1" src="file:///C:/Users/KETAAN~1.NOR/AppData/Local/Temp/msohtmlclip1/01/clip_image007.jpg" width=123 border=0 v:shapes="Picture_x0020_7"&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 1; mso-yfti-lastrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: #bbbbbb 1pt dashed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #bbbbbb 1pt dashed; PADDING-LEFT: 1.5pt; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; BACKGROUND-COLOR: transparent" vAlign=top width=400&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Figure 7&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Here I’ve put our new menu on top and the Out-of-Box menu below.&amp;nbsp; You can see how the OOB is just a flat view and our custom menu has levels.&amp;nbsp; Needless to say, I am not a UI guy, so my only styles are color changes, but you can really take this far.&amp;nbsp; In fact, you can use the Dynamic properties to have flyout menus as well.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;
&lt;TABLE class=MsoNormalTable style="BORDER-RIGHT: #bbbbbb 1pt dashed; BORDER-TOP: #bbbbbb 1pt dashed; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in; mso-cellspacing: 0in" cellSpacing=0 cellPadding=0 width=400 border=1 class="MsoNormalTable"&gt;
&lt;TBODY&gt;
&lt;TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: #bbbbbb 1pt dashed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #bbbbbb 1pt dashed; PADDING-LEFT: 1.5pt; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; BACKGROUND-COLOR: transparent" vAlign=top width=400&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A href="http://sharepoint.wanderingleaf.net/professional/Lists/Posts/Attachments/13/Picture4_316BB5C9.jpg"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'; TEXT-DECORATION: none; text-underline: none"&gt;&lt;IMG height=224 alt="Picture 4" src="file:///C:/Users/KETAAN~1.NOR/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg" width=493 border=0 v:shapes="Picture_x0020_8"&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow: 1; mso-yfti-lastrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: #bbbbbb 1pt dashed; PADDING-RIGHT: 1.5pt; BORDER-TOP: #bbbbbb 1pt dashed; PADDING-LEFT: 1.5pt; PADDING-BOTTOM: 1.5pt; BORDER-LEFT: #bbbbbb 1pt dashed; WIDTH: 300pt; PADDING-TOP: 1.5pt; BORDER-BOTTOM: #bbbbbb 1pt dashed; BACKGROUND-COLOR: transparent" vAlign=top width=400&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Figure 8&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;After navigating to Parent List 2, we can see how the cousin/nephew hiding is working.&amp;nbsp; We’re only seeing the child nodes of Parent List 2.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;Here’s the code:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;A href="http://sharepoint.wanderingleaf.net/professional/Lists/Posts/Attachments/13/SPListNavigationProvider_316BB5C9.zip" target=_blank&gt;&lt;SPAN style="FONT-SIZE: 12pt"&gt;&lt;FONT color=#0000ff&gt;Link to Code&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9338751" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ketaanhs/archive/tags/MOSS/default.aspx">MOSS</category><category domain="http://blogs.msdn.com/ketaanhs/archive/tags/Sharepoint+2007/default.aspx">Sharepoint 2007</category><category domain="http://blogs.msdn.com/ketaanhs/archive/tags/Navigation+Provider/default.aspx">Navigation Provider</category></item></channel></rss>