Il controllo SiteMapPath è assai utile per implementare un sistema di spostamento tra le pagine del sito recuperando i dati da un oggetto SiteMap, il quale a sua volta si basa su un file xml appositamente costrutito (e gestito tramite l'oggetto) che funge da mappa del sito.
Il SiteMapPath è estremamente comodo per spostarsi facilmente all'interno di un sito senza sprecare spazio e funge da punto di riferimento per individuare nel sito la posizione della pagina attualmente visualizzata.
Questo tipo di controllo visualizza un percorso gerarchico di nomi di pagine con collegamenti ipertestuali tramite il quale è possibile tornare dalla posizione corrente ai livelli superiori della gerarchia di pagine.
Il controllo SiteMapPath è costituito da nodi. Ciascun elemento del percorso viene indicato come un collegamento ipertestuale rappresentato da un oggetto SiteMapNodeItem e ogni nodo è separato dal successivo con un separatore.
Un errore che ho commesso in questi giorni, dovuto dal fatto che non avevo mai sentito la necessità di usare il controllo in questione, è stato quello di confondere il corretto separatore da utilizzare.
Il controllo SiteMapPath, infatti, espone due sistemi per inserire un separatore. La proprietà PathSeparator, di tipo stringa, utilizzabile per fornire appunto stringhe letterali come separatori, e il PathSeparatorTemplate, di tipo ITemplate, per fornire come separatore un oggetto che può essere una immagine, una label e via dicendo.
Non sò per quale ragione, ma la proprietà PathSepartor mi era sfuggita, e avevo utilizzato il template con la stringa che mi interessava utilizzare come separatore.
La cosa bella era che tutto funzionava egregiamente, ma nel momento in cui ho creato il mio Adapter personale (per evitare quelle tonnellate di codice inutile generato dal controllo base), mi ritrovavo al posto della mia stringa il simbolo dei due punti. E non riuscivo a comprendere il perchè, fintanto che aprendo un ticket - pensando ad un bug - sul sito Microsoft, dopo diversi giorni ricevo una risposta circa la mia errata implementazione.
Il bug è stato chiudo come non fixed; effettivamente parte dell'errore era mio. Ma nessuno mi ha spiegato però perchè la stringa - che non doveva essere correttamente visualizzata - senza adapter invece veniva rappresentata così gliela fornivo e per giunta perchè, invece di mostrare il carattere di default minore, venivano mostrati i due punti.
Misteri della programmazione ASP.Net!
Nota: il PathSepartorTemplate ha priorità rispetto alla proprietà PathSeparator. Questo significa che se entrambe vengono impostate, quello che verrà mostrato sarà il contenuto del Template.