<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>navigation Wiki Rss Feed</title><link>http://navigation.codeplex.com/wikipage</link><description>navigation Wiki Rss Description</description><item><title>Updated Wiki: Getting Started</title><link>http://navigation.codeplex.com/wikipage?title=Getting Started&amp;version=5</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Getting Started&lt;/h1&gt;
The most straightforward way to add the Navigation framewok to a new or existing ASP.NET Web Site or Application is to install it using NuGet by running the command Install-Package Navigation from within the Package Manager Console.&lt;br /&gt;&lt;br /&gt;If NuGet is unavailable (prior to VS 2010) the set up can be performed manually. The first stage of this manual set up is to add reference to the Navigation.dll, which can be downloaded from &lt;a href="http://navigation.codeplex.com/"&gt;http://navigation.codeplex.com/&lt;/a&gt;.  After (unblocking and) unzipping the download the Navigation.dll should be obtained from the folder (beneath the bin folder) that corresponds to the version of .NET in use.&lt;br /&gt;&lt;br /&gt;The next state requires the registration of the StateAdapter class as an adapter for the Page control*. The steps to follow are:&lt;br /&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Add an App_Browsers folder – right click the Web Project and select &lt;i&gt;Add ASP.NET Folder -&amp;gt; App_Browsers&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Add a .browser file to the App_Browsers folder – right click the App_Browsers folder and select &lt;i&gt;Add New Item&lt;/i&gt;, select &lt;i&gt;Browser File&lt;/i&gt; and give it a name&lt;/li&gt;
&lt;li&gt;Configure the StateAdapter class as the Page’s control adapter – paste the configuration below into the .browser file&lt;/li&gt;&lt;/ol&gt;
&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;browsers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;browser&lt;/span&gt; &lt;span style="color:Red;"&gt;refID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Default&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;controlAdapters&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
			&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;adapter&lt;/span&gt; &lt;span style="color:Red;"&gt;controlType&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;System.Web.UI.Page&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;adapterType&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Navigation.StateAdapter, Navigation&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;controlAdapters&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;browser&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;browsers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;The final stage of the manual is to create a StateInfo.config file, which will be used in the next section to hold the details of the pages and navigation between these pages:&lt;br /&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Add a new Text File called StateInfo.config file to the Web Project&lt;/li&gt;
&lt;li&gt;Point the Navigation framework as this file by adding the configuration below into the Web.config file&lt;/li&gt;&lt;/ol&gt;
&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;configSections&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;sectionGroup&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Navigation&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
			&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;section&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;StateInfo&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Navigation.StateInfoSectionHandler, Navigation&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;configSections&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Green;"&gt;&amp;lt;!-- other config elided --&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Navigation&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StateInfo&lt;/span&gt; &lt;span style="color:Red;"&gt;configSource&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;StateInfo.config&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Navigation&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;There is a small difference between the NuGet and manual installations which will be covered in the Navigation Hyperlink and Data Expression section.&lt;br /&gt;&lt;br /&gt;*&lt;i&gt;In VS 2005 adding an adapter for a Page causes the XhtmlConformance setting to be ignored, for more information see &lt;a href="http://connect.microsoft.com/VisualStudio/feedback/details/179365/using-a-page-adapter-causes-the-xhtmlconformance-mode-setting-to-be-ignored"&gt;http://connect.microsoft.com/VisualStudio/feedback/details/179365/using-a-page-adapter-causes-the-xhtmlconformance-mode-setting-to-be-ignored&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;a name="Sample"&gt;&lt;/a&gt;
&lt;h2&gt;Sample Web Site&lt;/h2&gt;Create a new Web Application project called NavigationSample, by selecting &lt;i&gt;File -&amp;gt; New -&amp;gt; Project&lt;/i&gt; and the &lt;i&gt;ASP.NET Empty Web Application&lt;/i&gt; option. Set it up to start using the Navigation framework by running the command &lt;i&gt;Install-Package Navigation&lt;/i&gt; from within the Package Manager Console.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>GrahamMendick</author><pubDate>Fri, 29 Mar 2013 13:09:56 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Getting Started 20130329010956P</guid></item><item><title>Updated Wiki: Progressive Enhancement</title><link>http://navigation.codeplex.com/wikipage?title=Progressive Enhancement&amp;version=5</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Progressive Enhancement&lt;/h1&gt;
Progressive enhancement is a web design strategy that allows everyone to access the basic content whilst providing an enhanced experience for supporting clients. &lt;br /&gt;&lt;br /&gt;ASP.NET Ajax is a form of progressive enhancement since, if the browser supports Ajax then partial page rendering is used, otherwise it defaults to the full page post back model. However, ASP.NET Ajax only operates on posts and so only Buttons and ImageButtons can be used (LinkButtons are not suitable for progressive enhancement as they require javascript). &lt;br /&gt;&lt;br /&gt;The Navigation Framework does not care whether a PostBack or refresh Navigation occurred as long as the StateContext Data is the same, illustrated in the following image.&lt;br /&gt;
&lt;h6&gt;PostBack or Refresh Navigation&lt;/h6&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=navigation&amp;DownloadId=392950" alt="PostBack&amp;#32;or&amp;#32;Refresh&amp;#32;Navigation" title="PostBack&amp;#32;or&amp;#32;Refresh&amp;#32;Navigation" /&gt;&lt;br /&gt;&lt;br /&gt;So the Pager, Sorter and NavigationHyperLink controls can be configured so that they render both as Hyperlinks (javascript disabled) and as javascript PostBacks, as detailed in the table below. They use a technique know as Hijax whereby they render as normal Hyperlinks but, with javascript enabled, the default behavior is hijacked and turned into a PostBack:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;i&gt;&amp;lt;a href=”URL” onclick=”&lt;/i&gt;&lt;i&gt;doPostBack();return false”/&amp;gt;&lt;/i&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;h6&gt;Configuration for dual Hyperlink and PostBack behavior&lt;/h6&gt;&lt;table&gt;&lt;tr&gt;&lt;th&gt; Control &lt;/th&gt;&lt;th&gt; Configuration &lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Pager &lt;/td&gt;&lt;td&gt; QueryStringField must be populated and PostBackHyperLink set to true &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; Sorter &lt;/td&gt;&lt;td&gt; Navigate and PostBackHyperLink must both be true &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; NavigationHyperLink &lt;/td&gt;&lt;td&gt; Direction must be set to Refresh and PostBack to true &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;With javascript disabled these controls behave as Hyperlinks and so bookmarking and browser history work as usual. Also, it works seamlessly with SEO (Search Engine Optimization) as Web Crawlers can follow the Hyperlink.&lt;br /&gt;&lt;br /&gt;With javascript enabled, these controls behave as PostBack links and so, by wrapping them inside an UpdatePanel, ASP.NET Ajax can be used to provide partial page rendering*. In the &lt;a href="http://navigation.codeplex.com/wikipage?title=ASP.NET%20Ajax%20History&amp;referringTitle=Progressive%20Enhancement"&gt;ASP.NET Ajax History&lt;/a&gt; section, bookmarking and browser history suppport will be added for true progressive enhancement.&lt;br /&gt;&lt;br /&gt;Similarly to the Navigation framework&amp;#39;s integration with DataBinding, where data bound controls automatically refresh when there is a change to their StateContext Data, there is a NavigationDataTrigger that allows UpdatePanels to do the same.&lt;br /&gt;&lt;br /&gt;*&lt;i&gt;Suggest setting ClientIDMode to Auto on Pager, Sorter and NavigationHyperLink controls when used inside an UpdatePanel, for more information see &lt;a href="http://connectppe.microsoft.com/VisualStudio/feedback/details/596088/asp-4-0-clientidmode-predictable-causes-problems-with-updatepanel-when-using-ajax-control-toolkits-toolkitscriptmanager"&gt;http://connectppe.microsoft.com/VisualStudio/feedback/details/596088/asp-4-0-clientidmode-predictable-causes-problems-with-updatepanel-when-using-ajax-control-toolkits-toolkitscriptmanager&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;a name="Sample"&gt;&lt;/a&gt;
&lt;h2&gt;Sample Web Site&lt;/h2&gt;Change the Pager by setting the QueryStringField and PostBackHyperLink properties as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Pager&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Pager1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;QueryStringField&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;q&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;PostBackHyperLink&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Fields&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NextPreviousPagerField&lt;/span&gt; &lt;span style="color:Red;"&gt;ButtonType&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Button&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;ShowFirstPageButton&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;True&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;ShowLastPageButton&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;True&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Fields&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Pager&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Pressing F5 and clicking the paging links will cause POST requests. Turning off javascript and clicking the paging links will cause GET requests. Both provide a fully functioning back button, but only the javascript disabled scenario provides the ability to bookmark, because with javascript enabled the URL never changes when the links are clicked (this will be rectified in the ASP.NET Ajax History section).&lt;br /&gt;&lt;br /&gt;The same can be done for the Sorter, by setting its Navigate and PostBackHyperLink properties (see below)&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Sorter&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Sorter1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;SortBy&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Navigate&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;PostBackHyperLink&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;and the NavigationHyperLink, by setting its PostBack property (see below)&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationHyperLink&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;HyperLink1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Direction&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Refresh&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;ToData&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;&amp;lt;%$ NavigationData: maximumRows?int=5 %&amp;gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;5&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;IncludeCurrentData&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;PostBack&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationHyperLink&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;HyperLink2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Direction&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Refresh&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;ToData&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;&amp;lt;%$ NavigationData: maximumRows?int=10 %&amp;gt;&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;10&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;IncludeCurrentData&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;PostBack&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;To the Listing.aspx add ASP.NET Ajax functionality by including a ScriptManager and wrap an UpdatePanel around all the controls as shown in below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ScriptManager&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;ScriptManager1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;UpdatePanel&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;UpdatePanel1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ContentTemplate&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FormView&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;FormView1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;DataSourceID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;NavigationDataSource1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;DefaultMode&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Edit&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="background-color:Yellow;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color:Green;"&gt;--other controls elided--&lt;/span&gt;&lt;span style="background-color:Yellow;"&gt;%&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ObjectDataSource&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ContentTemplate&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;UpdatePanel&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Pressing F5 and filtering, sorting and paging the Person List illustrates the Ajax PartialPageRequests in action. However, the browser back button remains disabled (this will be rectified in the ASP.NET Ajax History section).&lt;br /&gt;&lt;br /&gt;Currently the UpdatePanel is set to always Update, as would be expected with this being the only UpdatePanel on the Page. However, to show how the NavigationDataTrigger works, change the UpdateMode to Conditional and set the ChildrenAsTriggers to false as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;UpdatePanel&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;UpdatePanel1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;UpdateMode&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Conditional&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;ChildrenAsTriggers&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Pressing F5 and sorting, for example, will not update the Person List. To fix this, add  NavigationDataTriggers, one for each piece of StateContext Data that requires the UpdatePanel to refresh, as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;UpdatePanel&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;UpdatePanel1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;UpdateMode&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Conditional&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;ChildrenAsTriggers&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ContentTemplate&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="background-color:Yellow;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color:Green;"&gt;--controls elided--&lt;/span&gt;&lt;span style="background-color:Yellow;"&gt;%&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ContentTemplate&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Triggers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataTrigger&lt;/span&gt; &lt;span style="color:Red;"&gt;Key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;name&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataTrigger&lt;/span&gt; &lt;span style="color:Red;"&gt;Key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;minDateOfBirth&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataTrigger&lt;/span&gt; &lt;span style="color:Red;"&gt;Key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;sortExpression&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataTrigger&lt;/span&gt; &lt;span style="color:Red;"&gt;Key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;startRowIndex&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataTrigger&lt;/span&gt; &lt;span style="color:Red;"&gt;Key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;maximumRows&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataTrigger&lt;/span&gt; &lt;span style="color:Red;"&gt;Key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;dateFilterVisible&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Triggers&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;UpdatePanel&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Pressing F5 and filtering, sorting and paging the Person List all result in a refresh of the UpdatePanel.&lt;br /&gt;&lt;br /&gt;However, there is one difference between the javascript on and javascript off scenarios. This can be seen by entering a value in one of the search Text Boxes (without pressing the Search Button) in between clicking the paging, page resizing and sorting links. With javascript on the Text Box value is retained, whereas with javascript off it is lost. &lt;br /&gt;&lt;br /&gt;For consistent behaviour the search criteria must be restored when paging, page resizing or sorting with javascript on. Adding the startRowIndex, maximumRows and sortExpression to the SelectParameters of the NavigationDataSource, as shown below, will cause the Text Boxes to rebind when paging, page resizing or sorting occurs respectively.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataSource&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;NavigationDataSource1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;SelectParameters&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataParameter&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;startRowIndex&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataParameter&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;maximumRows&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataParameter&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;sortExpression&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;SelectParameters&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;UpdateParameters&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataParameter&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;sortExpression&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Reset&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataParameter&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;startRowIndex&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Reset&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;UpdateParameters&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataSource&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>GrahamMendick</author><pubDate>Fri, 21 Dec 2012 21:16:57 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Progressive Enhancement 20121221091657P</guid></item><item><title>Updated Wiki: Mobile</title><link>http://navigation.codeplex.com/wikipage?title=Mobile&amp;version=3</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Mobile&lt;/h1&gt;
A web site designed for a desktop browser is unlikely to work so well on a mobile device due to the latter&amp;#39;s reduced screen size and touch input method, for example. Sometimes it can be enough just to add media-specific css or change the master page layout, but at other times mobile specific versions of pages will also be needed.&lt;br /&gt;&lt;br /&gt;ASP.NET MVC 4 introduced a simple mechanism to override a view for mobile browsers. Providing a mobile-specific view just consists of copying the existing view file and adding &amp;#39;.Mobile&amp;#39; to the file name. In VS 2012 The Navigation framework introduces this functionality into Web Forms.&lt;br /&gt;&lt;br /&gt;This feature only works for States that have a route configured. Taking the State Information configuration in &lt;a href="http://navigation.codeplex.com/wikipage?title=State%20Information&amp;referringTitle=Mobile"&gt;State Information&lt;/a&gt;, to provide a mobile-specific view for State S1 first a route must be added as detailed in &lt;a href="http://navigation.codeplex.com/wikipage?title=ASP.NET%20Routing&amp;referringTitle=Mobile"&gt;ASP.NET Routing&lt;/a&gt; and shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;S1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;page&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/P1.aspx&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;route&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;R/{P}&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;transition&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;T1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;to&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;S2&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Next create a page called P1.Mobile.aspx. Then whenever the State S1 is navigated to in a mobile browser the P1.Mobile.aspx page will be displayed instead of the P1.aspx page.&lt;br /&gt;&lt;br /&gt;This feature also applies to master pages and themes. For example, delete the page P1.Mobile.aspx and instead assign a master page called M1.Master to page P1.aspx (either directly in the page itself or through the masters attribute of the State Information configuration). Next create a master page called M1.Mobile.Master. Then whenever the State S1 is navigated to in a mobile browser the page P1.aspx will be displayed but with the M1.Mobile.Master master page.&lt;br /&gt;&lt;br /&gt;The Navigation framework&amp;#39;s mobile support uses the Display Modes functionality introduced in ASP.NET MVC 4. So it&amp;#39;s possible to create views for any individual browser. For example, an iPhone Display Mode can be created by adding the code shown below to the Application_Start method of the Global.asax file (making sure to add a using to the System.Web.WebPages namespace).&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
DisplayModeProvider.Instance.Modes.Insert(0, &lt;span style="color:Blue;"&gt;new&lt;/span&gt; DefaultDisplayMode(&lt;span style="color:#A31515;"&gt;&amp;quot;iPhone&amp;quot;&lt;/span&gt;)
{
	ContextCondition = (context =&amp;gt; context.GetOverriddenUserAgent().IndexOf
		(&lt;span style="color:#A31515;"&gt;&amp;quot;iPhone&amp;quot;&lt;/span&gt;, StringComparison.OrdinalIgnoreCase) &amp;gt;= 0)
});
&lt;/pre&gt;&lt;/div&gt;Then a master page called M1.iPhone.Master will be displayed whenever state S1 is navigated to in an iPhone.&lt;br /&gt;&lt;br /&gt;If using VS 2012 is not an option the Navigation framework provides mobile support by allowing any or all of the page, route, theme and masters to be overridden by specifying the mobilePage, mobileRoute, mobileTheme and mobileMasters attributes respectively.&lt;br /&gt;&lt;br /&gt;Taking the State Information configuration in &lt;a href="http://navigation.codeplex.com/wikipage?title=State%20Information&amp;referringTitle=Mobile"&gt;State Information&lt;/a&gt; the State S1 can be assigned a mobile specific page as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;dialog&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;D1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;initial&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;S1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;path&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/Default.aspx&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;S1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;page&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/P1.aspx&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;mobilePage&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/P1.Mobile.aspx&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;transition&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;T1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;to&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;S2&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;S2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;page&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/P2.aspx&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;transition&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;T2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;to&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;S3&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;S3&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;page&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/P3.aspx&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;dialog&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;To be clear, these two approaches to providing mobile-specific views are conflicting and the latter should only be used if VS 2012 is unavailable.&lt;br /&gt;&lt;br /&gt;Browser overriding was introduced in VS 2012, allowing a request to be treated as if it originated from a different browser (user agent). The Navigation framework&amp;#39;s ViewSwitcher control uses browser overriding to enable toggling between mobile and desktop views (similar to the view switcher functionality introduced into MVC 4).&lt;br /&gt;&lt;a name="Sample"&gt;&lt;/a&gt;
&lt;h2&gt;Sample Web Site&lt;/h2&gt;The Details State already has a route attribute configured, so add a Web Form called Details.Mobile.aspx to the Web Site with a heading signifying it as a mobile-specific page as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="background-color:Yellow;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color:Blue;"&gt;@&lt;/span&gt; &lt;span style="color:#A31515;"&gt;Page&lt;/span&gt; &lt;span style="color:Red;"&gt;Language&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;C#&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;AutoEventWireup&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;CodeBehind&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Details.Mobile.aspx.cs&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Inherits&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;NavigationSample.Details_Mobile&amp;quot;&lt;/span&gt; &lt;span style="background-color:Yellow;"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color:#A31515;"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color:Red;"&gt;html&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;html&lt;/span&gt; &lt;span style="color:Red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;head&lt;/span&gt; &lt;span style="color:Red;"&gt;id&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Head1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;title&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;title&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;head&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;body&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;form&lt;/span&gt; &lt;span style="color:Red;"&gt;id&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;form1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;h1&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Mobile Page&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;h1&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;form&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;body&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;html&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Pressing F5 and selecting a person will show the Details.aspx page. One way to see the Details.Mobile.aspx page would be to use a browser that allows the switching of the user agent string to simulate browser acces (e.g., chrome dev tools).&lt;br /&gt;&lt;br /&gt;Another way is to use the ViewSwitcher control. Add a ViewSwitcher control to Listing.aspx, before the FormView, as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ViewSwitcher&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;DesktopSwitchText&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Deskop view&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;MobileSwitchText&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Mobile view&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Pressing F5 and clicking the Mobile view Hyperlink will redisplay the page with a Desktop view Hyperlink visible to enable the switch back. Notice that  the search criteria, sorting and paging information are all retained when switching between views. Now selecting a person from the list will display the Details.Mobile.aspx page.&lt;br /&gt;&lt;br /&gt;To demonstrate mobile-specific development prior to VS 2012 set the mobilePage attribute as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Details&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;page&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/Details.aspx&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;mobilePage&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/Details.Mobile.aspx&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;title&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Person Details&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;route&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Person/{id}&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;defaultTypes&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;id=int&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>GrahamMendick</author><pubDate>Fri, 21 Dec 2012 21:12:43 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Mobile 20121221091243P</guid></item><item><title>Updated Wiki: ASP.NET Routing</title><link>http://navigation.codeplex.com/wikipage?title=ASP.NET Routing&amp;version=3</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;ASP.NET Routing&lt;/h1&gt;
In VS 2010 ASP.NET Routing was introduced to Web Forms, which enables the use of URLs that do not have to map to specific files. &lt;br /&gt;&lt;br /&gt;Route URLs can be configured for a State by setting the ‘route’ attribute. The configuration can contain a mixture of routed and non-routed States. Taking the State Information configuration in &lt;a href="http://navigation.codeplex.com/wikipage?title=State%20Information&amp;referringTitle=ASP.NET%20Routing"&gt;State Information&lt;/a&gt; the State S1 can be assigned a route with one parameter as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;dialog&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;D1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;initial&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;S1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;path&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/Default.aspx&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;S1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;page&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/P1.aspx&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;route&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;R/{P}&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;transition&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;T1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;to&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;S2&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;S2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;page&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/P2.aspx&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;transition&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;T2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;to&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;S3&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;S3&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;page&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/P3.aspx&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;dialog&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;This example route, R/{P}, will not be matched if its mandatory parameter P is not provided. Although this parameter can be specified as optional by marking it with an asterisk e.g. R/{*P}, this techique does not work for more than one parameter. To solve this the Navigation framework allows defaults to be configured. The syntax for assigning defaults is Key1?type1=Value1, Key2?type2=Value2, where the valid type values are string, bool, int, long, float, double, decimal, datetime, byte and char, with the default being string. An example for specifying string and int defaults for a route with two parameters is shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;S2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;page&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/P2.aspx&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;route&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;R/{P}/{Q}&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;defaults&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;P=s,Q?int=0&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;transition&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;T2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;to&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;S3&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Although defaults are associated with supplying values for route parameters, they  also supply default StateContext Data values and are relevant even if a route is not specified. Any value specified in defaults will be added to the StateContext Data unless a non-default value is already present (i.e. not null and not empty string).&lt;br /&gt;&lt;br /&gt;ASP.NET Routing is associated with human-readable URLs. However, there are two currently two impediments to achieving this in the Navigation framework, to see what these are consider a routed URL produced on navigating from P1 to P2 and passing values of &amp;#39;a&amp;#39; and &amp;#39;1&amp;#39; for the NavigationData items P and Q respecitively:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;i&gt;R/a/12_3?c1=0-0&lt;/i&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;But the intended URL is R/a/1, so what are the extra bits and how can they be removed?&lt;br /&gt;&lt;br /&gt;Objects other than strings stored in NavigationData will have characters appended, identifying their type, when they appear in URLs. That&amp;#39;s why the &amp;#39;1&amp;#39; appears as 12_3 in the above example. To remedy this the Navigation framework allows defaultTypes to be configured. The syntax for assigning defaultTypes is Key1=type1, Key2=type2, where the valid type values are string, bool, int, long, float, double, decimal, datetime, byte and char. In the example, the configuration below shows how to define the default type of the Q NavigationData item as an int. Notice, the type is no longer required when specifying Q&amp;#39;s default value.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;S2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;page&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/P2.aspx&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;route&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;R/{P}/{Q}&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;defaults&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;P=s,Q=0&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;defaultTypes&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Q=int&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;transition&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;T2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;to&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;S3&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;By using default values the URL has become R/a/1?c1=0-0. The query string element is the information needed to maintain the Crumb Trail. This can be turned off by setting trackCrumbTrail to false as shown below. However, turning it off does come at the expense of back navigation.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;S2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;page&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/P2.aspx&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;route&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;R/{P}/{Q}&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;defaults&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;P=s,Q=0&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;defaultTypes&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Q=int&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;trackCrumbTrail&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;transition&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;T2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;to&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;S3&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;As with defaults, default values are relevant even if a route is not specified. The example URL is now  R/a/1, as initially intended.&lt;br /&gt;&lt;br /&gt;URLs look slightly different in Navigation 1.5 when compared with Navigation 1.4 (with _ used as a separator instead of !). This is due to the change to the UrlEncode method introduced in VS 2012. To revert back to the original URL format add the configuration shown below (but be aware that this will cause longer URLs when the AntiXssEncoder is configured, as it is by default in VS 2012).&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;configSections&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;sectionGroup&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Navigation&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
			&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;section&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;StateInfo&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Navigation.StateInfoSectionHandler, Navigation&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
			&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;section&lt;/span&gt; &lt;span style="color:Red;"&gt;name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Settings&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Navigation.NavigationSettings, Navigation&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;sectionGroup&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;configSections&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Green;"&gt;&amp;lt;!-- other config elided --&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Navigation&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StateInfo&lt;/span&gt; &lt;span style="color:Red;"&gt;configSource&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;StateInfo.config&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Settings&lt;/span&gt; &lt;span style="color:Red;"&gt;originalUrlSeparators&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Navigation&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;a name="Sample"&gt;&lt;/a&gt;
&lt;h2&gt;Sample Web Site&lt;/h2&gt;Configure the Listing State to have a route with the sortExpression as a parameter as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StateInfo&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;dialog&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Person&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;initial&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Listing&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;path&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/Listing.aspx&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Listing&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;page&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/Listing.aspx&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;title&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Person Search&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;route&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;List/{sortExpression}&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
			&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;transition&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Select&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;to&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Details&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Details&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;page&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/Details.aspx&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;title&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Person Details&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;dialog&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;StateInfo&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Pressing F5 will throw an exception as no default value is supplied for this parameter. Rather than mark the parameter as optional i.e. List/{*sortExpression}, a default sort expression will be supplied instead as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Listing&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;page&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/Listing.aspx&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;title&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Person Search&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;route&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;List/{sortExpression}&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;defaults&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;sortExpression=Name&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;transition&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Select&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;to&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Details&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Since this default value is added to StateContext Data it works with the Sorter Control and a default sort order is applied when F5 is pressed. To show that defaults work independently of routing try firstly removing the parameter from the route attribute and secondly removing the route attribute entirely. In both scenarios the default sort order is still applied when F5 is pressed.&lt;br /&gt;&lt;br /&gt;Configure the Details State to have a route with the id as a parameter as shown below. Pressing F5 and selecting a Person will show the Details page as normal but now the URL matches the pattern specified in the configuration.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Details&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;page&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/Details.aspx&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;title&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Person Details&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;route&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Person/{id}&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;However, the because the id route parameter is an integer it has has the characters 2_3 appended in the URL. This can be fixed by configuring its default type as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Details&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;page&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/Details.aspx&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;title&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Person Details&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;route&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Person/{id}&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;defaultTypes&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;id=int&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;The URL has query string variables appended which is used by the Navigation Framework to manage the crumb trail information. To remove this set the trackCrumbTrail attribute of the Details State to false as shown below. Pressing F5 and selecting a Person will throw an Exception. This is because the NavigationHyperLink on the Details.aspx uses back navigation to return to the Person Search. Setting trackCrumbTrail to false for the Details State prevents crumbs from being remembered and so the back navigation does not work.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Details&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;page&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/Details.aspx&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;title&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Person Details&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;route&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Person/{id}&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;defaultTypes&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;id=int&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;trackCrumbTrail&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Change this NavigationHyperLink on Details.aspx to use forward navigation instead as shown below. This time pressing F5 and selecting a Person will successfully show the Person Details and this time the URL has no query string variables.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationHyperLink&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;HyperLink1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Action&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Person&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Person Search&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;This clean URL has come at the cost of the link back to the Person Search no longer retaining the search, sort and paging information. This information is only retained by the Navigation Framework when crumb trail tracking is turned on and is then restored during a back navigation.&lt;br /&gt;&lt;br /&gt;Defaults can be used to make the paging parameters of the Search method non-nullable. First, define integer defaults for the startRowIndex and maximumRows, as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Listing&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;page&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/Listing.aspx&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;title&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Person Search&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;route&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;List/{sortExpression}&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;defaults&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;sortExpression=Name,startRowIndex?int=0,maximumRows?int=10&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;transition&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Select&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;to&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Details&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Then, change the Search method so these parameter are no longer nullable, as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; IEnumerable&amp;lt;Person&amp;gt; Search(
	[NavigationData] &lt;span style="color:Blue;"&gt;string&lt;/span&gt; name, 
	[NavigationData] &lt;span style="color:Blue;"&gt;string&lt;/span&gt; minDateOfBirth, 
	[NavigationData] &lt;span style="color:Blue;"&gt;string&lt;/span&gt; sortExpression,
	[NavigationData] &lt;span style="color:Blue;"&gt;int&lt;/span&gt; startRowIndex,
	[NavigationData] &lt;span style="color:Blue;"&gt;int&lt;/span&gt; maximumRows)
{
	&lt;span style="color:Blue;"&gt;var&lt;/span&gt; q = &lt;span style="color:Blue;"&gt;from&lt;/span&gt; p &lt;span style="color:Blue;"&gt;in&lt;/span&gt; _People
			&lt;span style="color:Blue;"&gt;where&lt;/span&gt; (name == &lt;span style="color:Blue;"&gt;null&lt;/span&gt; || p.Name.ToUpperInvariant().Contains(name.ToUpperInvariant()))
			&amp;amp;&amp;amp; (minDateOfBirth == &lt;span style="color:Blue;"&gt;null&lt;/span&gt; || p.DateOfBirth &amp;gt;= DateTime.Parse(minDateOfBirth))
			&lt;span style="color:Blue;"&gt;select&lt;/span&gt; p;
	&lt;span style="color:Blue;"&gt;if&lt;/span&gt; (sortExpression != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
		q = !sortExpression.EndsWith(&lt;span style="color:#A31515;"&gt;&amp;quot;DESC&amp;quot;&lt;/span&gt;) ? q.OrderBy(p =&amp;gt; p.Name) : q.OrderByDescending(p =&amp;gt; p.Name);
	StateContext.Data[&lt;span style="color:#A31515;"&gt;&amp;quot;totalRowCount&amp;quot;&lt;/span&gt;] = q.Count();
	&lt;span style="color:Blue;"&gt;return&lt;/span&gt; q.Skip(startRowIndex).Take(maximumRows);
}
&lt;/pre&gt;&lt;/div&gt;Defaults can also be used to initialise the dateFilterVisible StateContext Data item rather than using the codebehind as currently. So remove the Page_Load method containing this initialisation and instead add a bool default of false for the dateFilterVisible as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Listing&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;page&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;~/Listing.aspx&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;title&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Person Search&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;route&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;List/{sortExpression}&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;defaults&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;sortExpression=Name,startRowIndex?int=0,maximumRows?int=10,dateFilterVisible?bool=false&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;transition&lt;/span&gt; &lt;span style="color:Red;"&gt;key&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Select&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;to&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Details&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;state&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>GrahamMendick</author><pubDate>Fri, 21 Dec 2012 21:00:35 GMT</pubDate><guid isPermaLink="false">Updated Wiki: ASP.NET Routing 20121221090035P</guid></item><item><title>Updated Wiki: ASP.NET Ajax History</title><link>http://navigation.codeplex.com/wikipage?title=ASP.NET Ajax History&amp;version=5</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;ASP.NET Ajax History&lt;/h1&gt;
As seen in the &lt;a href="http://navigation.codeplex.com/wikipage?title=Crumb%20Trail%20Data&amp;referringTitle=ASP.NET%20Ajax%20History"&gt;Crumb Trail Data&lt;/a&gt; section, StateContext Data should be populated with the data required to recreate the current State. This is so that when it is Navigated back to via a Crumb all this data will be passed in and the screen can be presented to the user as it was the last time they visited it e.g. in the &lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Sorting%20and%20Paging&amp;referringTitle=ASP.NET%20Ajax%20History"&gt;Data Sorting and Paging&lt;/a&gt; section, storing the sort order in StateContext Data means when they Navigate back the sort order is retained. The image below illustrates the way StateContext Data can be updated as PostBacks occur and since StateContext Data is stored in ControlState the browser back button causes no problems.&lt;br /&gt;
&lt;h6&gt;Browser Back and StateContext&lt;/h6&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=navigation&amp;DownloadId=392951" alt="Browser&amp;#32;Back&amp;#32;and&amp;#32;StateContext" title="Browser&amp;#32;Back&amp;#32;and&amp;#32;StateContext" /&gt;&lt;br /&gt;&lt;br /&gt;ASP.NET Ajax and the UpdatePanel automatically add Ajax functionality to any Page, converting traditional PostBacks into PartialPageRequests. Consequently the browser back button no longer inserts history in the ‘usual’ manner. To circumvent this, the ScriptManager Control exposes the AddHistoryPoint method which allows the programmatic addition of history to the back button. This method takes a parameter which should contain all the data needed to recreate the Page. When the back button is pressed the ScriptManager raises an event passing back this data so the Page can be recreated. So, passing the StateContext Data to the AddHistoryPoint method means the image above remains the same except PostBacks are now replaced with partial PartialPageRequests and Browser Backs with ScriptManager events. &lt;br /&gt;&lt;br /&gt;The StateController class has an AddHistoryPoint method which accepts a NavigationData parameter, that calls the ScriptManager AddHistoryPoint method passing this data, and a NavigateHistory method, that sets back this NavigationData into StateContext Data as a result of a ScriptManager history event. The latter is considered as history Navigation. A history Navigation does not result in a change to the PreviousState stored in StateContext as this is only changed during a non-PostBack scenario i.e. forward, backward and refresh Navigation.&lt;br /&gt;&lt;br /&gt;Be aware of the following:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;History Navigation is not available in VS 2005 since ASP.NET Ajax AddHistoryPoint is not available &lt;/li&gt;
&lt;li&gt;In VS 2008 ASP.NET Ajax AddHistoryPoint functionality throws errors if reserved HTML/URL characters are contained in the state data. To avoid this set EnableSecureHistoryState on the ScriptManager to true&lt;/li&gt;
&lt;li&gt;History Navigation does not work in Opera prior to version 11 since ASP.NET Ajax AddHistoryPoint produces very strange query strings in this browser&lt;/li&gt;&lt;/ol&gt;
Rather than performing history Navigation programmatically, there is a HistoryNavigator control that, by detecting changes to StateContext Data, handles it automatically. This control should be added towards the bottom of the Page, after any data bound controls, because the change detection runs in the PreRender event and expects all StateContext Data updates to have taken place by then.&lt;br /&gt;&lt;br /&gt;The HistoryNavigator allows customisation of when history points are added and how they&amp;#39;re subsequently navigated. By default a history point is added whenever a change is detected to any StateContext Data item. By populating HistoryNavigator&amp;#39;s HistoryKeys property with a comma delimited list of keys the change detection will only run against this subset of StateContext Data. By default when a history Navigation occurs all StateContext Data is first cleared before adding the incoming NavigationData.  By populating HistoryNavigator&amp;#39;s StateKeys property with a comma delimited list of keys these items will retain their original values during a history Navigation.&lt;br /&gt;&lt;br /&gt;ASP.NET Ajax manages history by storing state in the hash fragment of a URL, following the &amp;amp;&amp;amp; separator, for example:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;i&gt;Default.aspx#&amp;amp;&amp;amp;key=value&lt;/i&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;Prior to HTML5 modifying the hash fragment was the best option. However, the advent of HTML5 introduced the History API which allows custom URLs to be used, eradicating the hash fragment for modern browsers. &lt;br /&gt;&lt;br /&gt;Although ASP.NET has not updated its Ajax History implementation to use HTML5 History, support has been added directly into the Navigation framework. To make use of this add the ScriptReference below to the ScriptManager&amp;#39;s Scripts list.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ScriptReference&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Navigation.HTML5History.js&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Assembly&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Navigation&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;If the browser does not support the new HTML5 History API it will fall back to the default ASP.NET Ajax History behavior. HTML5 History support will really pay dividends in the &lt;a href="http://navigation.codeplex.com/wikipage?title=ASP.NET%20Routing&amp;referringTitle=ASP.NET%20Ajax%20History"&gt;ASP.NET Routing&lt;/a&gt; section because it will mean all URLs, including history, can be made user-friendly. It also results in faster loading of bookmarked links because there is no longer the delay of waiting for the javascript to run.&lt;br /&gt;&lt;br /&gt;There are a few provisos to be aware of when adding this ScriptReference:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;History points must be added using the StateController&lt;/li&gt;
&lt;li&gt;The page must not have been navigated to using NavigationMode.Server&lt;/li&gt;
&lt;li&gt;Cross page posting is not supported from a page with route parameters&lt;/li&gt;&lt;/ol&gt;
&lt;a name="Sample"&gt;&lt;/a&gt;
&lt;h2&gt;Sample Web Site&lt;/h2&gt;Start by enabling ASP.NET Ajax History on the ScriptManager, ensuring Secure History is disabled, as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ScriptManager&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;ScriptManager1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;EnableHistory&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;True&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;EnableSecureHistoryState&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;To enable the browser back button the AddHistoryPoint method on the StateController class must be called. Add a handler to the GridView’s DataBound event and call the AddHistoryPoint method passing  a copy of the current StateContext Data  (see below). This DataBound method is ideal as it is only called when the NavigationDataParameters change i.e. when the StateContext Data changes. &lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; GridView1_DataBound(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; sender, EventArgs e)
{
	&lt;span style="color:Blue;"&gt;if&lt;/span&gt; (!ScriptManager1.IsInAsyncPostBack || ScriptManager1.IsNavigating)
		&lt;span style="color:Blue;"&gt;return&lt;/span&gt;;
	StateController.AddHistoryPoint(Page, &lt;span style="color:Blue;"&gt;new&lt;/span&gt; NavigationData(&lt;span style="color:Blue;"&gt;true&lt;/span&gt;), &lt;span style="color:Blue;"&gt;null&lt;/span&gt;);
}
&lt;/pre&gt;&lt;/div&gt;Now each time the Person List is (validly) filtered, sorted or paged the browser back button gets a new history page added. Pressing the Search Button multiple times without changing the search criteria does not add a history point. This is because it is only on a change of NavigationDataParameter that the GridView gets DataBound. However, the browser back button does not ‘work’ as the search criteria and the Person List are not restored.&lt;br /&gt;&lt;br /&gt;To restore the Person List, add a handler to the ScriptManager’s Navigate event and call the NavigateHistory method on StateController as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; ScriptManager1_Navigate(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; sender, HistoryEventArgs e)
{
	&lt;span style="color:Blue;"&gt;if&lt;/span&gt; (ScriptManager1.IsInAsyncPostBack)
		StateController.NavigateHistory(e.State);
}
&lt;/pre&gt;&lt;/div&gt;Press F5 and filter, page and sort the Person List a few times. Pressing the back button successfully cycles the Person List back through its previous incarnations. This is because the NavigateHistory replaces the StateContext Data with that associated with the HistoryPoint, which causes the GridView to rebind.&lt;br /&gt;&lt;br /&gt;To restore the search criteria, the FormView must be rebound. This can be done by adding name and midDateOfBirth SelectParameters to the NavigationDataSource as shown below. This causes the Text Boxes to rebind their Text properties against their associated StateContext Data whenever a change is detected. Now pressing the back button cycles the Text Boxes back through their previous values.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataSource&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;NavigationDataSource1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;SelectParameters&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataParameter&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt; 
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataParameter&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;minDateOfBirth&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt; 
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataParameter&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;startRowIndex&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataParameter&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;maximumRows&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataParameter&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;sortExpression&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;SelectParameters&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;UpdateParameters&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataParameter&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;sortExpression&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Reset&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataParameter&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;startRowIndex&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Reset&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;UpdateParameters&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataSource&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;An alternative approach to history management is to use the HistoryNavigator control. So, delete the DataBound and Navigate event listeners from the codebehind and their corresponding attributes in the Design view; and instead add a HistoryNavigator after the Pager control, as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HistoryNavigator&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Press F5 to see the history working as before, but now without any codebehind.&lt;br /&gt;&lt;br /&gt;However, one nagging problem remains with the history Navigation if javascript is enabled. If the &amp;#39;Show Date of Birth Filter&amp;#39; button is clicked when the page first loads and then the back button is pressed the total row count display value disappears. This problem would not occur if the search criteria changed during the history Navigation because this would cause the GridView to rebind and the totalRowCount to be calculated afresh. Nor would the problem occur if this was not the very first history point because the totalRowCount would appear in the url and hence would be set from the NavigationData during a history Navigation.&lt;br /&gt;&lt;br /&gt;A possible fix would be to prevent a history point being added when the &amp;#39;Show Date of Birth Filter&amp;#39; button is clicked, i.e., when the dateFilterVisible StateContext item changes. This can be achieved by excluding the dateFilterVisible key when specifying the keys the HistoryNavigator should monitor as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HistoryNavigator&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;HistoryKeys&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;name,minDateOfBirth,sortExpression,startRowIndex,maximumRows,totalRowCount&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;But this means the javascript enabled/disabled experiences are different. So a better fix is to specify that the totalRowCount StateContext item is retained during a history Navigation by setting the StateKeys property as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HistoryNavigator&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;StateKeys&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;totalRowCount&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Now that history Navigation is working as desired, the final stage is to get it to use HTML5 History. By adding the ScriptReference shown below, the history URLs no longer use the hash fragment. In fact, they&amp;#39;re identical to the URLs produced when javascript is disabled.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ScriptManager&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;ScriptManager1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;EnableHistory&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;True&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;EnableSecureHistoryState&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Scripts&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ScriptReference&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Navigation.HTML5History.js&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Assembly&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Navigation&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Scripts&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ScriptManager&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>GrahamMendick</author><pubDate>Fri, 21 Dec 2012 20:57:28 GMT</pubDate><guid isPermaLink="false">Updated Wiki: ASP.NET Ajax History 20121221085728P</guid></item><item><title>Updated Wiki: ASP.NET Ajax History</title><link>http://navigation.codeplex.com/wikipage?title=ASP.NET Ajax History&amp;version=4</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;ASP.NET Ajax History&lt;/h1&gt;
As seen in the &lt;a href="http://navigation.codeplex.com/wikipage?title=Crumb%20Trail%20Data&amp;referringTitle=ASP.NET%20Ajax%20History"&gt;Crumb Trail Data&lt;/a&gt; section, StateContext Data should be populated with the data required to recreate the current State. This is so that when it is Navigated back to via a Crumb all this data will be passed in and the screen can be presented to the user as it was the last time they visited it e.g. in the &lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Sorting%20and%20Paging&amp;referringTitle=ASP.NET%20Ajax%20History"&gt;Data Sorting and Paging&lt;/a&gt; section, storing the sort order in StateContext Data means when they Navigate back the sort order is retained. The image below illustrates the way StateContext Data can be updated as PostBacks occur and since StateContext Data is stored in ControlState the browser back button causes no problems.&lt;br /&gt;
&lt;h6&gt;Browser Back and StateContext&lt;/h6&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=navigation&amp;DownloadId=392951" alt="Browser&amp;#32;Back&amp;#32;and&amp;#32;StateContext" title="Browser&amp;#32;Back&amp;#32;and&amp;#32;StateContext" /&gt;&lt;br /&gt;&lt;br /&gt;ASP.NET Ajax and the UpdatePanel automatically add Ajax functionality to any Page, converting traditional PostBacks into PartialPageRequests. Consequently the browser back button no longer inserts history in the ‘usual’ manner. To circumvent this, the ScriptManager Control exposes the AddHistoryPoint method which allows the programmatic addition of history to the back button. This method takes a parameter which should contain all the data needed to recreate the Page. When the back button is pressed the ScriptManager raises an event passing back this data so the Page can be recreated. So, passing the StateContext Data to the AddHistoryPoint method means the image above remains the same except PostBacks are now replaced with partial PartialPageRequests and Browser Backs with ScriptManager events. &lt;br /&gt;&lt;br /&gt;The StateController class has an AddHistoryPoint method which accepts a NavigationData parameter, that calls the ScriptManager AddHistoryPoint method passing this data, and a NavigateHistory method, that sets back this NavigationData into StateContext Data as a result of a ScriptManager history event. The latter is considered as history Navigation. A history Navigation does not result in a change to the PreviousState stored in StateContext as this is only changed during a non-PostBack scenario i.e. forward, backward and refresh Navigation.&lt;br /&gt;&lt;br /&gt;Be aware of the following:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;History Navigation is not available in VS 2005 since ASP.NET Ajax AddHistoryPoint is not available &lt;/li&gt;
&lt;li&gt;In VS 2008 ASP.NET Ajax AddHistoryPoint functionality throws errors if reserved HTML/URL characters are contained in the state data. To avoid this set EnableSecureHistoryState on the ScriptManager to true&lt;/li&gt;
&lt;li&gt;History Navigation does not work in Opera prior to version 11 since ASP.NET Ajax AddHistoryPoint produces very strange query strings in this browser&lt;/li&gt;&lt;/ol&gt;
Rather than performing history Navigation programmatically, there is a HistoryNavigator control that, by detecting changes to StateContext Data, handles it automatically. This control should be added towards the bottom of the Page, after any data bound controls, because the change detection runs in the PreRender event and expects all StateContext Data updates to have taken place by then.&lt;br /&gt;&lt;br /&gt;The HistoryNavigator allows customisation of when history points are added and how they&amp;#39;re subsequently navigated. By default a history point is added whenever a change is detected to any StateContext Data item. By populating HistoryNavigator&amp;#39;s HistoryKeys property with a comma delimited list of keys the change detection will only run against this subset of StateContext Data. By default when a history Navigation occurs all StateContext Data is first cleared before adding the incoming NavigationData.  By populating HistoryNavigator&amp;#39;s StateKeys property with a comma delimited list of keys these items will retain their original values during a history Navigation.&lt;br /&gt;&lt;br /&gt;ASP.NET Ajax manages history by storing state in the hash fragment of a URL, following the &amp;amp;&amp;amp; separator, for example:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;i&gt;Default.aspx#&amp;amp;&amp;amp;key=value&lt;/i&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;Prior to HTML5 modifying the hash fragment was the best option. However, the advent of HTML5 introduced the History API which allows custom URLs to be used, eradicating the hash fragment for modern browsers. &lt;br /&gt;&lt;br /&gt;Although ASP.NET has not updated its Ajax History implementation to use HTML5 History, support has been added directly into the Navigation framework. To make use of this add the ScriptReference below to the ScriptManager&amp;#39;s Scripts list.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ScriptReference&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Navigation.HTML5History.js&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Assembly&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Navigation&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;If the browser does not support the new HTML5 History API it will fall back to the default ASP.NET Ajax History behavior. HTML5 History support will really pay dividends in the &lt;a href="http://navigation.codeplex.com/wikipage?title=ASP.NET%20Routing&amp;referringTitle=ASP.NET%20Ajax%20History"&gt;ASP.NET Routing&lt;/a&gt; section because it will mean all URLs, including history, can be made user-friendly. It also results in faster loading of bookmarked links because there is no longer the delay of waiting for the javascript to run.&lt;br /&gt;&lt;br /&gt;There are a few provisos to be aware of when adding this ScriptReference:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;History points must be added using the StateController&lt;/li&gt;
&lt;li&gt;The page must not have been navigated to using NavigationMode.Server&lt;/li&gt;
&lt;li&gt;Cross page posting is not supported from a page with route parameters&lt;/li&gt;&lt;/ol&gt;
&lt;a name="Sample"&gt;&lt;/a&gt;
&lt;h2&gt;Sample Web Site&lt;/h2&gt;Start by enabling ASP.NET Ajax History on the ScriptManager, ensuring Secure History is disabled, as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ScriptManager&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;ScriptManager1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;EnableHistory&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;True&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;EnableSecureHistoryState&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;To enable the browser back button the AddHistoryPoint method on the StateController class must be called. Add a handler to the GridView’s DataBound event and call the AddHistoryPoint method passing  a copy of the current StateContext Data  (see below). This DataBound method is ideal as it is only called when the NavigationDataParameters change i.e. when the StateContext Data changes. &lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; GridView1_DataBound(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; sender, EventArgs e)
{
	&lt;span style="color:Blue;"&gt;if&lt;/span&gt; (!ScriptManager1.IsInAsyncPostBack || ScriptManager1.IsNavigating)
		&lt;span style="color:Blue;"&gt;return&lt;/span&gt;;
	StateController.AddHistoryPoint(Page, &lt;span style="color:Blue;"&gt;new&lt;/span&gt; NavigationData(&lt;span style="color:Blue;"&gt;true&lt;/span&gt;), &lt;span style="color:Blue;"&gt;null&lt;/span&gt;);
}
&lt;/pre&gt;&lt;/div&gt;Now each time the Person List is (validly) filtered, sorted or paged the browser back button gets a new history page added. Pressing the Search Button multiple times without changing the search criteria does not add a history point. This is because it is only on a change of NavigationDataParameter that the GridView gets DataBound. However, the browser back button does not ‘work’ as the search criteria and the Person List are not restored.&lt;br /&gt;&lt;br /&gt;To restore the Person List, add a handler to the ScriptManager’s Navigate event and call the NavigateHistory method on StateController as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; ScriptManager1_Navigate(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; sender, HistoryEventArgs e)
{
	&lt;span style="color:Blue;"&gt;if&lt;/span&gt; (ScriptManager1.IsInAsyncPostBack)
		StateController.NavigateHistory(e.State);
}
&lt;/pre&gt;&lt;/div&gt;Press F5 and filter, page and sort the Person List a few times. Pressing the back button successfully cycles the Person List back through its previous incarnations. This is because the NavigateHistory replaces the StateContext Data with that associated with the HistoryPoint, which causes the GridView to rebind.&lt;br /&gt;&lt;br /&gt;To restore the search criteria, the FormView must be rebound. This can be done by adding name and midDateOfBirth SelectParameters to the NavigationDataSource as shown below. This causes the Text Boxes to rebind their Text properties against their associated StateContext Data whenever a change is detected. Now pressing the back button cycles the Text Boxes back through their previous values.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataSource&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;NavigationDataSource1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;SelectParameters&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataParameter&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt; 
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataParameter&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;minDateOfBirth&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt; 
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataParameter&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;startRowIndex&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataParameter&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;maximumRows&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataParameter&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;sortExpression&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;SelectParameters&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;UpdateParameters&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataParameter&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;sortExpression&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Reset&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataParameter&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;startRowIndex&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Reset&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;UpdateParameters&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataSource&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;An alternative approach to history management is to use the HistoryNavigator control. So, delete the DataBound and Navigate event listeners from the codebehind and their corresponding attributes in the Design view; and instead add a HistoryNavigator after the Pager control, as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HistoryNavigator&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Press F5 to see the history working as before, but now without any codebehind.&lt;br /&gt;&lt;br /&gt;The final stage is to start it using HTML5 History. By adding the ScriptReference shown below, the history URLs no longer use the hash fragment. In fact, they&amp;#39;re identical to the URLs produced for when javascript is disabled.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ScriptManager&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;ScriptManager1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;EnableHistory&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;True&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;EnableSecureHistoryState&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Scripts&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ScriptReference&lt;/span&gt; &lt;span style="color:Red;"&gt;Name&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Navigation.HTML5History.js&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Assembly&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Navigation&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Scripts&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ScriptManager&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>GrahamMendick</author><pubDate>Fri, 21 Dec 2012 20:52:37 GMT</pubDate><guid isPermaLink="false">Updated Wiki: ASP.NET Ajax History 20121221085237P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://navigation.codeplex.com/documentation?version=29</link><description>&lt;div class="wikidoc"&gt;The documentation below is available to download, &lt;a href="http://www.codeplex.com/Download?ProjectName=navigation&amp;DownloadId=581532"&gt;Navigation for ASP.NET Web Forms.pdf&lt;/a&gt;, as is the sample built from this documentation, &lt;a href="http://www.codeplex.com/Download?ProjectName=navigation&amp;DownloadId=581533"&gt;Navigation Sample for VS 2012.zip&lt;/a&gt; or &lt;a href="http://www.codeplex.com/Download?ProjectName=navigation&amp;DownloadId=581534"&gt;Navigation Sample for VS 2010.zip&lt;/a&gt; &lt;i&gt;(make sure to unblock the zip file prior to extraction and set Listing.aspx as the start page)&lt;/i&gt;.
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Introduction&amp;referringTitle=Documentation"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Getting%20Started&amp;referringTitle=Documentation"&gt;Getting Started&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Getting%20Started&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=State%20Information&amp;referringTitle=Documentation"&gt;State Information&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=State%20Information&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation&amp;referringTitle=Documentation"&gt;Navigation&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation%20Data&amp;referringTitle=Documentation"&gt;Navigation Data&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation%20Data&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Crumb%20Trail&amp;referringTitle=Documentation"&gt;Crumb Trail&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Crumb%20Trail&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Crumb%20Trail%20Data&amp;referringTitle=Documentation"&gt;Crumb Trail Data&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Crumb%20Trail%20Data&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Binding&amp;referringTitle=Documentation"&gt;Data Binding&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Binding&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Sorting%20and%20Paging&amp;referringTitle=Documentation"&gt;Data Sorting and Paging&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Sorting%20and%20Paging&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Sorting%20and%20Paging&amp;referringTitle=Documentation&amp;ANCHOR#Sorting"&gt;Sorting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Sorting%20and%20Paging&amp;referringTitle=Documentation&amp;ANCHOR#Paging"&gt;Paging&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation%20Hyperlink%20and%20Data%20Expression&amp;referringTitle=Documentation"&gt;Navigation Hyperlink and Data Expression&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation%20Hyperlink%20and%20Data%20Expression&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation%20Data%20Markup&amp;referringTitle=Documentation"&gt;Navigation Data Markup&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation%20Data%20Markup&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Progressive%20Enhancement&amp;referringTitle=Documentation"&gt;Progressive Enhancement&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Progressive%20Enhancement&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=ASP.NET%20Ajax%20History&amp;referringTitle=Documentation"&gt;ASP.NET Ajax History&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=ASP.NET%20Ajax%20History&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=ASP.NET%20Routing&amp;referringTitle=Documentation"&gt;ASP.NET Routing&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=ASP.NET%20Routing&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Mobile&amp;referringTitle=Documentation"&gt;Mobile&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Mobile&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Unit%20Testing&amp;referringTitle=Documentation"&gt;Unit Testing&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Unit%20Testing&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=URL%20Management&amp;referringTitle=Documentation"&gt;URL Management&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=URL%20Management&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>GrahamMendick</author><pubDate>Fri, 21 Dec 2012 20:48:37 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20121221084837P</guid></item><item><title>Updated Wiki: Navigation Data Markup</title><link>http://navigation.codeplex.com/wikipage?title=Navigation Data Markup&amp;version=2</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Navigation Data Markup&lt;/h1&gt;
There are currently two approaches to setting Control properties from StateContext Data:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Programmatically in the codebehind&lt;/li&gt;
&lt;li&gt;Data binding to a NavigationDataSource&lt;/li&gt;&lt;/ol&gt;
However, the former approach should be avoided because codebehinds should be as lean as possible and the latter can be cumbersome if only one way data binding is required.&lt;br /&gt;&lt;br /&gt;In VS 2012 Control properties can be set from StateContext Data in markup using the syntax {NavigationData key}. For example, to set a Literal&amp;#39;s Text property to the StateContext item with key &amp;#39;name&amp;#39; see below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Literal&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Literal1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;{NavigationData name}&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Before using this feature the NavigationControlBuilderInterceptor must be registered in the Web.config as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;compilation&lt;/span&gt; &lt;span style="color:Red;"&gt;debug&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;targetFramework&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;4.5&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;controlBuilderInterceptorType&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Navigation.NavigationDataControlBuilderInterceptor, Navigation&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Green;"&gt;&amp;lt;!-- other config elided --&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;compilation&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;The StateContext Data item does not have to be a string, any convertible Type is valid. Format strings are also supported using the syntax {NavigationData key,format}. For example, if the &amp;#39;date&amp;#39; key maps to a DateTime in StateContext then to use its short date representation see below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Literal&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Literal1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;{NavigationData date,{0:d}}&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;The syntax is not limited to string Control properties. For example, if there&amp;#39;s a bool object in StateContext Data with key &amp;#39;show&amp;#39; then it can be used to determine a Control&amp;#39;s visibility (see below).&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Button&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Button1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Visible&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;{NavigationData show}&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Setting a bool Control property from the negation of a StateContext Data item is supported using the syntax {NavigationData !key}. For example, for a bool stored in StateContext Data with key &amp;#39;hide&amp;#39; its negation can be used as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Button&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Button1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Visible&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;{NavigationData !hide}&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;This NavigationData markup syntax can also be used against  Control events. However, this requires the StateContext Data item to be a bool because when the associated event fires this item is toggled, i.e., if false it will be set to true and vice versa (see below for example usage).&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Button&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Button1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;OnClick&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;{NavigationData show}&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;a name="Sample"&gt;&lt;/a&gt;
&lt;h2&gt;Sample Web Site&lt;/h2&gt;A common requirement, unsupported by the Pager Control, is display the total count of rows. This value is already stored in StateContext Data as totalRowCount, because it&amp;#39;s needed by the Pager to determine whether there&amp;#39;s a next page, so the NavigationData markup syntax can be used to display it on the page by adding a new Literal Control after the Pager as show below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Literal&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Literal1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;{NavigationData totalRowCount}&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;To make this number meaningful a bit of descriptive text is necessary, so the string formatting capabilities of the syntax can be used to provide this context as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Literal&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Literal1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;{NavigationData totalRowCount,Total Count {0}}&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Rather than show both the name and date filters when the page first loads, it makes sense to show just the name filter and hide the lesser-used date of birth filter away, with a button provided to access it if required. To this end the date of birth Label and TextBox will be wrapped in a PlaceHolder with its Visible property set using the NavigationData markup syntax as show below*.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;PlaceHolder&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Visible&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;{NavigationData dateFilterVisible}&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Label&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Label2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Min Date of Birth&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;AssociatedControlID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;TextBox2&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBox&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;TextBox2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;#39;&amp;lt;%# Bind(&amp;quot;[minDateOfBirth]&amp;quot;) %&amp;gt;&amp;#39;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;PlaceHolder&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Pressing F5 will throw an exception becaue the dateFilterVisible StateContext Data item is null. It needs to be initialised to false. For now this can be done in the Page_Load method as shown below, but this will be removed in the &lt;a href="http://navigation.codeplex.com/wikipage?title=ASP.NET%20Routing&amp;referringTitle=Navigation%20Data%20Markup"&gt;ASP.NET Routing&lt;/a&gt; section when an easier method of setting default values is discussed.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; sender, EventArgs e)
{
	&lt;span style="color:Blue;"&gt;if&lt;/span&gt; (!IsPostBack)
		StateContext.Data[&lt;span style="color:#A31515;"&gt;&amp;quot;dateFilterVisible&amp;quot;&lt;/span&gt;] = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
}
&lt;/pre&gt;&lt;/div&gt;This time pressing F5 is successful but the date of birth filter is always invisible. To address this a Button can be added with its OnClick event set using NavigationData markup syntax as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Button&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Button2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Show Date of Birth Filter&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;OnClick&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;{NavigationData dateFilterVisible}&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Clicking the Button causes the dateFilterVisible StateContext Data item to be set to true which in turn sets the PlaceHolder to be visible. Finally, to hide the Button after it&amp;#39;s been clicked the NavigationData negation markup syntax can be used against its Visible property as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Button&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Button2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Show Date of Birth Filter&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Visible&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;{NavigationData !dateFilterVisible}&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;OnClick&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;{NavigationData dateFilterVisible}&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;*&lt;i&gt;The validation warning flagged against the Visible property&amp;#39;s NavigationData markup can be ignored&lt;/i&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>GrahamMendick</author><pubDate>Fri, 21 Dec 2012 20:47:05 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Navigation Data Markup 20121221084705P</guid></item><item><title>Updated Wiki: Navigation Data Markup</title><link>http://navigation.codeplex.com/wikipage?title=Navigation Data Markup&amp;version=1</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Navigation Data Markup&lt;/h1&gt;
There are currently two approaches to setting Control properties from StateContext Data:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Programmatically in the codebehind&lt;/li&gt;
&lt;li&gt;Data binding to a NavigationDataSource&lt;/li&gt;&lt;/ol&gt;
However, the former approach should be avoided because codebehinds should be as lean as possible and the latter can be cumbersome if only one way data binding is required.&lt;br /&gt;&lt;br /&gt;In VS 2012 Control properties can be set from StateContext Data in markup using the syntax {NavigationData key}. For example, to set a Literal&amp;#39;s Text property to the StateContext item with key &amp;#39;name&amp;#39; see below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Literal&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Literal1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;{NavigationData name}&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Before using this feature the NavigationControlBuilderInterceptor must be registered in the Web.config as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;compilation&lt;/span&gt; &lt;span style="color:Red;"&gt;debug&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;targetFramework&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;4.5&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;controlBuilderInterceptorType&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Navigation.NavigationDataControlBuilderInterceptor, Navigation&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Green;"&gt;&amp;lt;!-- other config elided --&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;compilation&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;The StateContext Data item does not have to be a string, any convertible Type is valid. Format strings are also supported using the syntax {NavigationData key,format}. For example, if the &amp;#39;date&amp;#39; key maps to a DateTime in StateContext then to use its short date representation see below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Literal&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Literal1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;{NavigationData date,{0:d}}&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;The syntax is not limited to string Control properties. For example, if there&amp;#39;s a bool object in StateContext Data with key &amp;#39;show&amp;#39; then it can be used to determine a Control&amp;#39;s visibility (see below).&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Button&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Button1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Visible&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;{NavigationData show}&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Setting a bool Control property from the negation of a StateContext Data item is supported using the syntax {NavigationData !key}. For example, for a bool stored in StateContext Data with key &amp;#39;hide&amp;#39; its negation can be used as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Button&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Button1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Visible&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;{NavigationData !hide}&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;This NavigationData markup syntax can also be used against  Control events. However, this requires the StateContext Data item to be a bool because when the associated event fires this item is toggled, i.e., if false it will be set to true and vice versa (see below for example usage).&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Button&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Button1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;OnClick&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;{NavigationData show}&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;a name="Sample"&gt;&lt;/a&gt;
&lt;h2&gt;Sample Web Site&lt;/h2&gt;A common requirement, unsupported by the Pager Control, is display the total count of rows. This value is already stored in StateContext Data as totalRowCount, because it&amp;#39;s needed by the Pager to determine whether there&amp;#39;s a next page, so the NavigationData markup syntax can be used to display it on the page by adding a new Literal Control after the Pager as show below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Literal&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Literal1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;{NavigationData totalRowCount}&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;To make this number meaningful a bit of descriptive text is necessary, so the string formatting capabilities of the syntax can be used to provide this context as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Literal&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Literal1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;{NavigationData totalRowCount,Total Count {0}}&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Rather than show both the name and date filters when the page first loads, it makes sense to show just the name filter and hide the lesser-used date of birth filter away, with a button provided to access it if required. To this end the date of birth Label and TextBox will be wrapped in a PlaceHolder with its Visible property set using the NavigationData markup syntax as show below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;PlaceHolder&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Visible&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;{NavigationData dateFilterVisible}&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Label&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Label2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Min Date of Birth&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;AssociatedControlID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;TextBox2&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBox&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;TextBox2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;#39;&amp;lt;%# Bind(&amp;quot;[minDateOfBirth]&amp;quot;) %&amp;gt;&amp;#39;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;PlaceHolder&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Pressing F5 will throw an exception becaue the dateFilterVisible StateContext Data item is null. It needs to be initialised to false. For now this can be done in the Page_Load method as shown below, but this will be removed in the &lt;a href="http://navigation.codeplex.com/wikipage?title=ASP.NET%20Routing&amp;referringTitle=Navigation%20Data%20Markup"&gt;ASP.NET Routing&lt;/a&gt; section when an easier method of setting default values is discussed.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color:Blue;"&gt;object&lt;/span&gt; sender, EventArgs e)
{
	&lt;span style="color:Blue;"&gt;if&lt;/span&gt; (!IsPostBack)
		StateContext.Data[&lt;span style="color:#A31515;"&gt;&amp;quot;dateFilterVisible&amp;quot;&lt;/span&gt;] = &lt;span style="color:Blue;"&gt;false&lt;/span&gt;;
}
&lt;/pre&gt;&lt;/div&gt;This time pressing F5 is successful but the date of birth filter is always invisible. To address this a Button can be added with its OnClick event set using NavigationData markup syntax as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Button&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Button2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Show Date of Birth Filter&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;OnClick&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;{NavigationData dateFilterVisible}&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Clicking the Button causes the dateFilterVisible StateContext Data item to be set to true which in turn sets the PlaceHolder to be visible. Finally, to hide the Button after it&amp;#39;s been clicked the NavigationData negation markup syntax can be used against its Visible property as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Button&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Button2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Show Date of Birth Filter&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Visible&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;{NavigationData !dateFilterVisible}&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;OnClick&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;{NavigationData dateFilterVisible}&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>GrahamMendick</author><pubDate>Fri, 21 Dec 2012 20:42:00 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Navigation Data Markup 20121221084200P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://navigation.codeplex.com/documentation?version=28</link><description>&lt;div class="wikidoc"&gt;The documentation below is available to download, &lt;a href="http://www.codeplex.com/Download?ProjectName=navigation&amp;DownloadId=581532"&gt;Navigation for ASP.NET Web Forms.pdf&lt;/a&gt;, as is the sample built from this documentation, &lt;a href="http://www.codeplex.com/Download?ProjectName=navigation&amp;DownloadId=581533"&gt;Navigation Sample for VS 2012.zip&lt;/a&gt; or &lt;a href="http://www.codeplex.com/Download?ProjectName=navigation&amp;DownloadId=581534"&gt;Navigation Sample for VS 2010.zip&lt;/a&gt; &lt;i&gt;(make sure to unblock the zip file prior to extraction and set Listing.aspx as the start page)&lt;/i&gt;.
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Introduction&amp;referringTitle=Documentation"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Getting%20Started&amp;referringTitle=Documentation"&gt;Getting Started&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Getting%20Started&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=State%20Information&amp;referringTitle=Documentation"&gt;State Information&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=State%20Information&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation&amp;referringTitle=Documentation"&gt;Navigation&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation%20Data&amp;referringTitle=Documentation"&gt;Navigation Data&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation%20Data&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Crumb%20Trail&amp;referringTitle=Documentation"&gt;Crumb Trail&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Crumb%20Trail&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Crumb%20Trail%20Data&amp;referringTitle=Documentation"&gt;Crumb Trail Data&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Crumb%20Trail%20Data&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Binding&amp;referringTitle=Documentation"&gt;Data Binding&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Binding&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Sorting%20and%20Paging&amp;referringTitle=Documentation"&gt;Data Sorting and Paging&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Sorting%20and%20Paging&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Sorting%20and%20Paging&amp;referringTitle=Documentation&amp;ANCHOR#Sorting"&gt;Sorting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Sorting%20and%20Paging&amp;referringTitle=Documentation&amp;ANCHOR#Paging"&gt;Paging&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation%20Hyperlink%20and%20Data%20Expression&amp;referringTitle=Documentation"&gt;Navigation Hyperlink and Data Expression&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation%20Hyperlink%20and%20Data%20Expression&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Progressive%20Enhancement&amp;referringTitle=Documentation"&gt;Progressive Enhancement&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Progressive%20Enhancement&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=ASP.NET%20Ajax%20History&amp;referringTitle=Documentation"&gt;ASP.NET Ajax History&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=ASP.NET%20Ajax%20History&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=ASP.NET%20Routing&amp;referringTitle=Documentation"&gt;ASP.NET Routing&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=ASP.NET%20Routing&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Mobile&amp;referringTitle=Documentation"&gt;Mobile&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Mobile&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Unit%20Testing&amp;referringTitle=Documentation"&gt;Unit Testing&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Unit%20Testing&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=URL%20Management&amp;referringTitle=Documentation"&gt;URL Management&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=URL%20Management&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>GrahamMendick</author><pubDate>Fri, 21 Dec 2012 20:18:06 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20121221081806P</guid></item><item><title>Updated Wiki: Home</title><link>http://navigation.codeplex.com/wikipage?version=32</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Navigation for ASP.NET Web Forms manages movement and data passing between ASPX pages in a unit-testable manner. There is no client-side logic, so it works in all browsers, and no server-side cache, so it works with the browser back button.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Comprehensive documentation and sample code can be found under the &lt;a href="http://navigation.codeplex.com/documentation?referringTitle=Home"&gt;Documentation tab&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A sample project built using this framework can be found at &lt;a href="http://navigationnerddinner.codeplex.com/"&gt;Navigation NerdDinner&lt;/a&gt;. It is a conversion of the ASP.NET MVC NerdDinner application to ASP.NET Web Forms and is accompanied by a 150-page PDF walkthrough.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Features&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;Loosely coupled pages&lt;/li&gt;
&lt;li&gt;Typed data passing&lt;/li&gt;
&lt;li&gt;Empty code-behinds&lt;/li&gt;
&lt;li&gt;Unit-testability&lt;/li&gt;
&lt;li&gt;Secure applications&lt;/li&gt;
&lt;li&gt;Problem-free browser back button&lt;/li&gt;
&lt;li&gt;Context-sensitive bread crumb trail&lt;/li&gt;
&lt;li&gt;ASP.NET data binding integration&lt;/li&gt;
&lt;li&gt;Automatic ASP.NET Ajax history navigation&lt;/li&gt;
&lt;li&gt;ASP.NET routing integration&lt;/li&gt;
&lt;li&gt;Progressive enhancement&lt;/li&gt;
&lt;li&gt;Single page applications&lt;/li&gt;
&lt;li&gt;Mobile and Display Modes support&lt;/li&gt;&lt;/ul&gt;
For explanation and examples of all these features and more see the &lt;a href="http://navigation.codeplex.com/documentation?referringTitle=Home"&gt;Documentation&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>GrahamMendick</author><pubDate>Fri, 21 Dec 2012 20:16:10 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20121221081610P</guid></item><item><title>New Comment on "Navigation Data"</title><link>http://navigation.codeplex.com/wikipage?title=Navigation Data&amp;ANCHOR#C24946</link><description>It happens, when I use GetNavigationLink method in .NET 4.0</description><author>ZedRoth</author><pubDate>Mon, 10 Sep 2012 15:54:35 GMT</pubDate><guid isPermaLink="false">New Comment on "Navigation Data" 20120910035435P</guid></item><item><title>New Comment on "Navigation Data"</title><link>http://navigation.codeplex.com/wikipage?title=Navigation Data&amp;ANCHOR#C24929</link><description>Hello&amp;#33;&amp;#10;I have keys with &amp;#34;amp&amp;#59;&amp;#34; prefix in StateContext.Data collection. What reasons can be&amp;#63;&amp;#10;&amp;#40;Thank you&amp;#58; it&amp;#39;s very suitable library&amp;#41;</description><author>ZedRoth</author><pubDate>Sat, 08 Sep 2012 19:10:01 GMT</pubDate><guid isPermaLink="false">New Comment on "Navigation Data" 20120908071001P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://navigation.codeplex.com/documentation?version=27</link><description>&lt;div class="wikidoc"&gt;The documentation below is available to download, &lt;a href="http://www.codeplex.com/Download?ProjectName=navigation&amp;DownloadId=421469"&gt;Navigation for ASP.NET Web Forms.pdf&lt;/a&gt;, as is the sample built from this documentation, &lt;a href="http://www.codeplex.com/Download?ProjectName=navigation&amp;DownloadId=421470"&gt;Navigation Sample for VS 2012.zip&lt;/a&gt; or &lt;a href="http://www.codeplex.com/Download?ProjectName=navigation&amp;DownloadId=465376"&gt;Navigation Sample for VS 2010.zip&lt;/a&gt; &lt;i&gt;(make sure to unblock the zip file prior to extraction and set Listing.aspx as the start page)&lt;/i&gt;.
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Introduction&amp;referringTitle=Documentation"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Getting%20Started&amp;referringTitle=Documentation"&gt;Getting Started&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Getting%20Started&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=State%20Information&amp;referringTitle=Documentation"&gt;State Information&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=State%20Information&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation&amp;referringTitle=Documentation"&gt;Navigation&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation%20Data&amp;referringTitle=Documentation"&gt;Navigation Data&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation%20Data&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Crumb%20Trail&amp;referringTitle=Documentation"&gt;Crumb Trail&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Crumb%20Trail&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Crumb%20Trail%20Data&amp;referringTitle=Documentation"&gt;Crumb Trail Data&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Crumb%20Trail%20Data&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Binding&amp;referringTitle=Documentation"&gt;Data Binding&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Binding&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Sorting%20and%20Paging&amp;referringTitle=Documentation"&gt;Data Sorting and Paging&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Sorting%20and%20Paging&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Sorting%20and%20Paging&amp;referringTitle=Documentation&amp;ANCHOR#Sorting"&gt;Sorting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Sorting%20and%20Paging&amp;referringTitle=Documentation&amp;ANCHOR#Paging"&gt;Paging&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation%20Hyperlink%20and%20Data%20Expression&amp;referringTitle=Documentation"&gt;Navigation Hyperlink and Data Expression&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation%20Hyperlink%20and%20Data%20Expression&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Progressive%20Enhancement&amp;referringTitle=Documentation"&gt;Progressive Enhancement&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Progressive%20Enhancement&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=ASP.NET%20Ajax%20History&amp;referringTitle=Documentation"&gt;ASP.NET Ajax History&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=ASP.NET%20Ajax%20History&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=ASP.NET%20Routing&amp;referringTitle=Documentation"&gt;ASP.NET Routing&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=ASP.NET%20Routing&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Mobile&amp;referringTitle=Documentation"&gt;Mobile&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Mobile&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Unit%20Testing&amp;referringTitle=Documentation"&gt;Unit Testing&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Unit%20Testing&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=URL%20Management&amp;referringTitle=Documentation"&gt;URL Management&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=URL%20Management&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>GrahamMendick</author><pubDate>Thu, 02 Aug 2012 19:18:56 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20120802071856P</guid></item><item><title>New Comment on "Documentation"</title><link>http://navigation.codeplex.com/documentation?&amp;ANCHOR#C24600</link><description>What is URL REDIRECTION&amp;#63;How can i use this concept in my .net&amp;#63;&amp;#10;my task is i have generated one url like this &amp;#34;http&amp;#58;&amp;#47;&amp;#47;example.com&amp;#47;&amp;#34;&amp;#10;I am passing one pearameter like &amp;#34;http&amp;#58;&amp;#47;&amp;#47;example.com&amp;#47;Empno&amp;#61;1&amp;#34;&amp;#10;I want to display Ename in Database table that corresponding &amp;#34;Empno&amp;#34;&amp;#10;plz Help me Give me one simple example&amp;#10;&amp;#10;I am new this concepts&amp;#10;plz Help me send source code to my mailID&amp;#58;mandla.anilbabu&amp;#64;gmail.com</description><author>anilbabum</author><pubDate>Thu, 02 Aug 2012 11:29:47 GMT</pubDate><guid isPermaLink="false">New Comment on "Documentation" 20120802112947A</guid></item><item><title>Updated Wiki: Documentation</title><link>http://navigation.codeplex.com/documentation?version=26</link><description>&lt;div class="wikidoc"&gt;The documentation below is available to download, &lt;a href="http://www.codeplex.com/Download?ProjectName=navigation&amp;DownloadId=421469"&gt;Navigation for ASP.NET Web Forms.pdf&lt;/a&gt;, as is the sample built from this documentation, &lt;a href="http://www.codeplex.com/Download?ProjectName=navigation&amp;DownloadId=421470"&gt;Navigation Sample.zip&lt;/a&gt; &lt;i&gt;(make sure to unblock the zip file prior to extraction and set Listing.aspx as the start page)&lt;/i&gt;.
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Introduction&amp;referringTitle=Documentation"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Getting%20Started&amp;referringTitle=Documentation"&gt;Getting Started&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Getting%20Started&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=State%20Information&amp;referringTitle=Documentation"&gt;State Information&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=State%20Information&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation&amp;referringTitle=Documentation"&gt;Navigation&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation%20Data&amp;referringTitle=Documentation"&gt;Navigation Data&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation%20Data&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Crumb%20Trail&amp;referringTitle=Documentation"&gt;Crumb Trail&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Crumb%20Trail&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Crumb%20Trail%20Data&amp;referringTitle=Documentation"&gt;Crumb Trail Data&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Crumb%20Trail%20Data&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Binding&amp;referringTitle=Documentation"&gt;Data Binding&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Binding&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Sorting%20and%20Paging&amp;referringTitle=Documentation"&gt;Data Sorting and Paging&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Sorting%20and%20Paging&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Sorting%20and%20Paging&amp;referringTitle=Documentation&amp;ANCHOR#Sorting"&gt;Sorting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Data%20Sorting%20and%20Paging&amp;referringTitle=Documentation&amp;ANCHOR#Paging"&gt;Paging&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation%20Hyperlink%20and%20Data%20Expression&amp;referringTitle=Documentation"&gt;Navigation Hyperlink and Data Expression&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation%20Hyperlink%20and%20Data%20Expression&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Progressive%20Enhancement&amp;referringTitle=Documentation"&gt;Progressive Enhancement&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Progressive%20Enhancement&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=ASP.NET%20Ajax%20History&amp;referringTitle=Documentation"&gt;ASP.NET Ajax History&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=ASP.NET%20Ajax%20History&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=ASP.NET%20Routing&amp;referringTitle=Documentation"&gt;ASP.NET Routing&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=ASP.NET%20Routing&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Mobile&amp;referringTitle=Documentation"&gt;Mobile&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Mobile&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Unit%20Testing&amp;referringTitle=Documentation"&gt;Unit Testing&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=Unit%20Testing&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=URL%20Management&amp;referringTitle=Documentation"&gt;URL Management&lt;/a&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://navigation.codeplex.com/wikipage?title=URL%20Management&amp;referringTitle=Documentation&amp;ANCHOR#Sample"&gt;Sample Web Site&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>GrahamMendick</author><pubDate>Tue, 03 Jul 2012 16:31:19 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20120703043119P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://navigation.codeplex.com/documentation?version=25</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Documentation for Navigation for ASP.NET Web Forms&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The documentation details the key concepts of the Navigation framework. Each concept is demonstrated through the construction of a sample Web Site. All the code to build the sample is included in the document, however should there be any problems the finished sample is available (make sure to unblock all zip files prior to extraction).
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/Download?ProjectName=navigation&amp;DownloadId=358389"&gt;Navigation for ASP.NET Web Forms.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/Download?ProjectName=navigation&amp;DownloadId=358390"&gt;Navigation Sample.zip&lt;/a&gt; &lt;b&gt;(make sure to set Listing.aspx as the start page)&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>GrahamMendick</author><pubDate>Tue, 03 Jul 2012 16:17:05 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20120703041705P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://navigation.codeplex.com/documentation?version=24</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Documentation for Navigation for ASP.NET Web Forms&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The documentation details the key concepts of the Navigation framework. Each concept is demonstrated through the construction of a sample Web Site. All the code to build the sample is included in the document, however should there be any problems the finished sample is available (make sure to unblock all zip files prior to extraction).
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/Download?ProjectName=navigation&amp;DownloadId=358389"&gt;Navigation for ASP.NET Web Forms.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/Download?ProjectName=navigation&amp;DownloadId=358390"&gt;Navigation Sample.zip&lt;/a&gt; &lt;b&gt;(make sure to set Listing.aspx as the start page)&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>GrahamMendick</author><pubDate>Fri, 29 Jun 2012 12:27:09 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20120629122709P</guid></item><item><title>Updated Wiki: Home</title><link>http://navigation.codeplex.com/wikipage?version=31</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Navigation for ASP.NET Web Forms manages movement and data passing between ASPX pages in a unit-testable manner. There is no client-side logic, so it works in all browsers, and no server-side cache, so it works with the browser back button.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Comprehensive documentation and sample code can be found under the &lt;a href="http://navigation.codeplex.com/documentation?referringTitle=Home"&gt;Documentation tab&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A sample project built using this framework can be found at &lt;a href="http://navigationnerddinner.codeplex.com/"&gt;Navigation NerdDinner&lt;/a&gt;. It is a conversion of the ASP.NET MVC NerdDinner application to ASP.NET Web Forms and is accompanied by a 150-page PDF walkthrough.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Features&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;Loosely coupled pages&lt;/li&gt;
&lt;li&gt;Typed data passing&lt;/li&gt;
&lt;li&gt;Empty code-behinds&lt;/li&gt;
&lt;li&gt;Unit-testability&lt;/li&gt;
&lt;li&gt;Secure applications&lt;/li&gt;
&lt;li&gt;Problem-free browser back button&lt;/li&gt;
&lt;li&gt;Context-sensitive bread crumb trail&lt;/li&gt;
&lt;li&gt;ASP.NET data binding integration&lt;/li&gt;
&lt;li&gt;Automatic ASP.NET Ajax history navigation&lt;/li&gt;
&lt;li&gt;ASP.NET routing integration&lt;/li&gt;
&lt;li&gt;Progressive enhancement&lt;/li&gt;
&lt;li&gt;Single page applications&lt;/li&gt;
&lt;li&gt;Mobile support&lt;/li&gt;&lt;/ul&gt;
For explanation and examples of all these features and more see the &lt;a href="http://navigation.codeplex.com/documentation?referringTitle=Home"&gt;Documentation&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>GrahamMendick</author><pubDate>Fri, 29 Jun 2012 11:00:26 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120629110026A</guid></item><item><title>Updated Wiki: Data Binding</title><link>http://navigation.codeplex.com/wikipage?title=Data Binding&amp;version=3</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Data Binding&lt;/h1&gt;
Thus far, getting and setting of values in StateContext Data has been done programmatically, as has the formation of the Crumb Trail. Examples of some problems this approach can cause are:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Bloated codebehinds – from maintenance, unit testability and reusability perspectives, the smaller the codebehind class the better&lt;/li&gt;
&lt;li&gt;Tight coupling – A business method might access StateContext Data which could make it dependent on a particular Navigation route&lt;/li&gt;&lt;/ol&gt;
To remedy this the Navigation Framework has classes that extend the ASP.NET DataBinding Framework and allow almost all NavigationUI code to be removed from the codebehind and business methods (see table below). The only bit that cannot be removed relates to Hyperlink consctruction and will be tackled in the &lt;a href="http://navigation.codeplex.com/wikipage?title=Navigation%20Hyperlink%20and%20Data%20Expression&amp;referringTitle=Data%20Binding"&gt;Navigation Hyperlink and Data Expression&lt;/a&gt; section.
&lt;h6&gt;Navigation DataBinding Support&lt;/h6&gt;&lt;table&gt;&lt;tr&gt;&lt;th&gt; Navigation Class &lt;/th&gt;&lt;th&gt; ASP.NET Base Class &lt;/th&gt;&lt;th&gt; Purpose &lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; NavigationDataAttribute &lt;/td&gt;&lt;td&gt; ValueProviderSourceAttribute &lt;/td&gt;&lt;td&gt; Binds a StateContext Data item to a method parameter. The method parameter name identifies the item to bind to, but a custom Key can be used instead &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; NavigationDataParameter &lt;/td&gt;&lt;td&gt; Parameter &lt;/td&gt;&lt;td&gt; Binds a StateContext Data item to a Parameter object. The Key property identifies the item to bind to, if it is not provided the Name property will be used instead &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; NavigationDataSource &lt;/td&gt;&lt;td&gt; DataSourceControl &lt;/td&gt;&lt;td&gt; Supports 2-way DataBinding with StateContext Data as the DataSource. Used to bind Control properties to StateContext Data items. Use the square bracket (e.g. &lt;a href="http://navigation.codeplex.com/wikipage?title=key&amp;referringTitle=Data%20Binding"&gt;key&lt;/a&gt;) binding syntax &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; CrumbTrailDataSource &lt;/td&gt;&lt;td&gt; DataSourceControl &lt;/td&gt;&lt;td&gt; Supports 1-way DataBinding with StateController Crumbs as the DataSource. The Crumb class is the data item, so can bind to the NavigationLink and Title properties. Can also bind to the Crumb data items using the square bracket (e.g. &lt;a href="http://navigation.codeplex.com/wikipage?title=key&amp;referringTitle=Data%20Binding"&gt;key&lt;/a&gt;) binding syntax &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The classes that allow code to be cleared from the codebehind and moved into the Design tab are the NavigationDataSource and CrumbTrailDataSource. They allow DataBinding to StateContext and CrumbTrail Data respectively.&lt;br /&gt;&lt;br /&gt;The classes that relate to the removal of StateContext Data access from the busines methods are NavigationDataAttribute and NavigationDataParameter. The former is for use in the value provider DataBinding framework provided by VS 2012; and the latter is for use in the DataSource binding mechanism prior to VS 2012.&lt;br /&gt;&lt;a name="Sample"&gt;&lt;/a&gt;
&lt;h2&gt;Sample Web Site&lt;/h2&gt;The NavigationDataSource will allow the codebehind of Listing.aspx to be cleared, the CrumbTrailDataSource will allow the codebehind of Details.aspx to be cleared and the NavigationDataAttribute (NavigationDataParameter prior to VS 2012) will remove StateContext Data access from the methods in the PersonSearch class.&lt;br /&gt;&lt;br /&gt;To begin, remove all the methods apart from the  GridView1_CallingDataMethods event listener from the codebehind of Listing.aspx (and the associated OnClick attribute). Turn to the Design view and register the Navigation assembly at the top by adding the code below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="background-color:Yellow;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color:Blue;"&gt;@&lt;/span&gt; &lt;span style="color:#A31515;"&gt;Register&lt;/span&gt; &lt;span style="color:Red;"&gt;assembly&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Navigation&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;namespace&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Navigation&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;tagprefix&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;cc1&amp;quot;&lt;/span&gt; &lt;span style="background-color:Yellow;"&gt;%&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;The setting of StateContext Data from the TextBox values and vice versa will be handled by 2-way DataBinding with a NavigationDataSource control. So, wrap the search criteria (including the Search Button and CompareValidator) of Listing.aspx inside a FormView attached to a NavigationDataSource and an EditItemTemplate as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FormView&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;FormView1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;DataSourceID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;NavigationDataSource1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;DefaultMode&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Edit&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;EditItemTemplate&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Label&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Label1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;AssociatedControlID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;TextBox1&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBox&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;TextBox1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Label&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Label2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Min Date of Birth&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;AssociatedControlID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;TextBox2&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBox&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;TextBox2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Button&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Button1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Search&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;CompareValidator&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;CompareValidator1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;ControlToValidate&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;TextBox2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;EnableClientScript&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;False&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;ErrorMessage&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;date error&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Operator&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;DataTypeCheck&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Type&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Date&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;EditItemTemplate&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;FormView&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataSource&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;NavigationDataSource1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;NavigationDataSource&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Pressing F5 will display the Person List although the search criteria no longer filter the list. So, set the Text properties of the two TextBoxes via the two-way DataBinding expression, using the keys that were previously assigned to the StateContext Data as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBox&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;TextBox1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;#39;&amp;lt;%# Bind(&amp;quot;[name]&amp;quot;) %&amp;gt;&amp;#39;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Label&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Label2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Min Date of Birth&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;AssociatedControlID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;TextBox2&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;TextBox&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;TextBox2&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;#39;&amp;lt;%# Bind(&amp;quot;[minDateOfBirth]&amp;quot;) %&amp;gt;&amp;#39;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Pressing F5 will display the Person List but the search criteria still do not filter the list. Set the Search Button’s CommandName attribute to ‘Update’ (see below). This will update the NavigationDataSource and the Text Box Text strings will be set into StateContext Data.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;Button&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Button1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;Text&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Search&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;CommandName&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;Update&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;However, this still does not allow the Person List to be filtered because the GridView has not been refreshed. The NavigationDataAttribute will get around this problem. Adding name and minDateOfBirth parameters, adorned with NavigationDataAttributes, to the Search method will cause the latter to be called whenever there is a change in either of these parameters and to rebind the GridView accordingly. This means the StateContext Data access can be removed from the method body, using the method parameters instead, as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; IEnumerable Search([NavigationData] &lt;span style="color:Blue;"&gt;string&lt;/span&gt; name, [NavigationData] &lt;span style="color:Blue;"&gt;string&lt;/span&gt; minDateOfBirth)
{
	&lt;span style="color:Blue;"&gt;return&lt;/span&gt; &lt;span style="color:Blue;"&gt;from&lt;/span&gt; p &lt;span style="color:Blue;"&gt;in&lt;/span&gt; _People
			&lt;span style="color:Blue;"&gt;where&lt;/span&gt; (name == &lt;span style="color:Blue;"&gt;null&lt;/span&gt; || p.Name.ToUpperInvariant().Contains(name.ToUpperInvariant()))
			&amp;amp;&amp;amp; (minDateOfBirth == &lt;span style="color:Blue;"&gt;null&lt;/span&gt; || p.DateOfBirth &amp;gt;= DateTime.Parse(minDateOfBirth))
			&lt;span style="color:Blue;"&gt;select&lt;/span&gt; &lt;span style="color:Blue;"&gt;new&lt;/span&gt;
			{
				p.Name,
				p.DateOfBirth,
				Link = StateController.GetNavigationLink(&lt;span style="color:#A31515;"&gt;&amp;quot;Select&amp;quot;&lt;/span&gt;, &lt;span style="color:Blue;"&gt;new&lt;/span&gt; NavigationData() { { &lt;span style="color:#A31515;"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;, p.Id } })
			};
}
&lt;/pre&gt;&lt;/div&gt;This time Pressing F5 will display the Person List with fully functioning search criteria. Searching on an invalid date works without adding any code as this is a by-product of using DataBinding since the NavigationDataSource will only be updated if the Page is valid.&lt;br /&gt;&lt;br /&gt;The same treatment can be done to the Details.aspx Page. First, remove the Page_Load method from its codebehind. This has stopped the Hyperlink from the details back to the Listing from working, but the CrumbTrailDataSource will be used to restore this functionality. Register the Navigation assembly at the top of the Design view. Delete the Hyperlink and replace it with a ListView, DataBound to the CrumbTrailDataSource, containing a Hyperlink with its NavigateUrl property one-way bound to the NavigationLink Property of the Crumb class (see below).&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ListView&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;ListView1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;DataSourceID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;CrumbTrailDataSource1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;ItemPlaceholderID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;PlaceHolder1&amp;quot;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;LayoutTemplate&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;PlaceHolder&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;PlaceHolder1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;LayoutTemplate&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
		&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HyperLink&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;HyperLink1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;NavigateUrl&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;#39;&amp;lt;%# Eval(&amp;quot;NavigationLink&amp;quot;) %&amp;gt;&amp;#39;&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;Listing&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;HyperLink&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
	&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#A31515;"&gt;asp&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;ListView&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:Blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#A31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:Blue;"&gt;:&lt;/span&gt;&lt;span style="color:#A31515;"&gt;CrumbTrailDataSource&lt;/span&gt; &lt;span style="color:Red;"&gt;ID&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;CrumbTrailDataSource1&amp;quot;&lt;/span&gt; &lt;span style="color:Red;"&gt;runat&lt;/span&gt;&lt;span style="color:Blue;"&gt;=&lt;/span&gt;&lt;span style="color:Blue;"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:Blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;Add an id parameter, adorned with a NavigationDataAttribute, to the GetDetails method and remove the StateContext Data access from the method body, as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; Person GetDetails([NavigationData] &lt;span style="color:Blue;"&gt;int&lt;/span&gt; id)
{
	&lt;span style="color:Blue;"&gt;return&lt;/span&gt; (&lt;span style="color:Blue;"&gt;from&lt;/span&gt; p &lt;span style="color:Blue;"&gt;in&lt;/span&gt; _People
			&lt;span style="color:Blue;"&gt;where&lt;/span&gt; p.Id == id
			&lt;span style="color:Blue;"&gt;select&lt;/span&gt; p).First();
}
&lt;/pre&gt;&lt;/div&gt;Pressing F5 will display fully functioning Listing and Details Pages. &lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>GrahamMendick</author><pubDate>Fri, 29 Jun 2012 10:58:11 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Data Binding 20120629105811A</guid></item></channel></rss>