Ситуация с навигацией:
- На сайте есть меню, базирующееся на SiteMap
- На сайте есть меню SiteMapPath
- На страницах уровня 3 и глубже в контроле ContentPlaceHolder имеется подменю SiteMap
- На страницах уровня 1-2 подменю нет.
- Сайт многоязычный, из-за чего ко всем линкам в меню и контролах динамически добавляется указатель культуры "?cl=en-US" или другой по необходимости.
Проблема возникла из-за добавления указателя культуры к SiteMapPath.
Варианты решения и проблемы с ними:
- Для события ItemDataBound был написан код, в котором в свойство SiteMapNodeItemEventArgs.Item.SiteMapNode.Url добавлялся указатель культуры. Но почему-то это изменение срабатывает не сразу, т.е. после обновления страницы, либо даже не для всех элементов. В чем прикол?
- Как альтернатива первому методу был написан SiteMapResolveEventHandler, в котором производилась операция по добавлению указателя культуры к CurrentNode, а также последовательно к ParentNodes. Принцип был взят из примеров, на которые на всех форумах старательно ссылаются. Все замечательно заработало, за исключением одного: в подменю в ContentPlaceHolder в страницах уровня 3 и глубже стал отображаться только один пункт - текущий. Все остальные просто не появляются. В чем прикол?
- До написания SiteMapProvider пока что не дошел. Просто не успел до конца разобраться. Возможно, это лучший вариант. Тогда займусь им. Но хочется разобраться с описанным выше.
Если всего сказанного недостаточно, могу показать код данных модулей, т.к. ничего секретного там нет.