Pokud patříte mezi lidi zasvědcené do technologie ASP.NET, tak jste se již pravděpodobně setkali s třídou XMLSiteMapProvider. Díky ní můžete definovat pevnou strukturu stránky přes XML soubor a popřípadě přidat další SiteMapProvidery jako další větve.
Vše funguje krásně do té doby, než se pokusíte změnit větev nějakého jiného providera, který je navázaný do XmlSiteMapProvidera. Výstup se totiž nemění a zůstává stejný jako při prvním spuštění.
Proč to tak je?
Dlouho jsem si s tím lámal hlavu (ostatně s tím byl velký problém na tomto serveru VbNet.cz), až se mi do rukou dostaly kódy této třídy. Zjistil jsem, že funkce pro určení, zda se něco změnilo v podřízené větvi jiného providera porovnává se starým výsledkem pouze funkcí
Equal - ta porovná pouze klíče větví (většinou konstatní), ale na titulek nebo url se ani nepodívá, takže se místo nových dat používají často ty staré.
Tento nedostatek se dá velice snadno vyřešit přidáním nové funkce, která znovu sestaví sitemapu:
Public Class XmlSiteMapProviderExt
Inherits XmlSiteMapProvider
Public Sub RefreshSiteMap()
Clear()
BuildSiteMap()
End Sub
End Class