2015-05-16 4 views
0

Когда у меня есть:MvcSiteMapProvider FindSiteMapNode возвращение родительского узел вместо текущего узла

var node = SiteMap.Provider.FindSiteMapNode(HttpContext.Current); 

и страница я на исключен роли сайта, то FindSiteMapNode возвращает ближайшую видимые родительский узел Я нахожусь на. Я ожидал, что он вернется null.

Как я могу проверить, доступна ли страница, доступ к которой доступна, в SiteMap?

ответ

0

Как проверить, доступна ли страница, доступ к которой доступна на SiteMap?

Вы можете использовать HTML-помощник SiteMap, чтобы увидеть все видимые в данный момент узлы в SiteMap.

@Html.MvcSiteMap().SiteMap() 

Линия

var node = SiteMap.Provider.FindSiteMapNode(HttpContext.Current); 

будет работать только с MvcSiteMapProvider 3.х или раньше. Это доступ к модели поставщика ASP.NET SiteMap, на которой v4.x больше не основывается. Как было отмечено в documentation, правильный синтаксис для V4.x является

var node = MvcSiteMapProvider.SiteMaps.Current.FindSiteMapNodeFromCurrentContext(); 

MvcSiteMapProvider FindSiteMapNode возвращения родительский узел вместо текущего узла

Что касается этого вопроса, то очевидно, имеют более чем один узла, настроенного для соответствия маршруту (независимо от того, что это). first match always wins.

Обратите внимание, что если вы используете v3.x или перед тем, как пытаетесь выполнить «частичные совпадения», которые могут быть причиной этой проблемы. Он также был настроен так, чтобы всегда возвращать корневой узел вместо нуля, когда совпадение не найдено. Обе эти проблемы были исправлены в более поздних версиях версии 4.x.

+0

Звучит неплохо ... Мне нужно определить, какая версия у меня есть! –