Ecco un diagramma UML semplificato delle dipendenze che ho steso per visualizzare il disegno dietro i controlli web per la navigazione del sito: TreeView, SiteMapPath (breadcrumb) e Menu.
![](/images/blogs_ugidotnet_org/luka/516/o_ASPNET20SiteNavigation.gif)
TreeView e Menu sono i due HierarchicalDataBoundControl che possono utilizzare le due HierarchicalDataSourceControl: SiteMapDataSource e XmlDataSource.
XmlSiteMapProvider è un SiteMapProvider che legge il file .sitemap che può essere sostituito un SiteMapProvider personalizzato (che ad esempio legge la mappa del sito da un Db o da un file .xml con struttura personalizzata).
Una limitazione discutibile: il SiteMapPath è pensato per rappresentare la mappa di una singola Web Application (per capirci una Vistual Directory su IIS che è una Application che richiede il suo Web.Config e in cui c'è il \bin per tutta l'applicazione) come se un intero portale finisse in una sola Web Application quando invece è buona norma fare Web Application distinte per isolare applicazioni distinte (distinte variabili di sessioni , "processo", ... ) e quindi poterle sviluppare e testare come unità autonome (e integratabili). In concreto non è possibile senza trucchi macchinosi condividere un file .sitemap tra le diverse Web Application di uno stesso portale.