Я использую помощник Html MvcSiteMapProvider для создания панели навигации. Содержимое панели навигации зависит от прав посетителя, поэтому я использую обрезку безопасности, чтобы отображать только тот контент, на который у человека есть права. Для повышения производительности я пытаюсь кэшировать эту панель навигации.
Панель навигации создается в частичном представлении со следующим содержимым:
@Html.MvcSiteMap().Menu("MenuHelper", new { name = "MainMenu" })
Внутри файла макета он вызывается методом действия, который возвращает частичное представление:
[System.Web.Mvc.OutputCache(Duration = 10, VaryByCustom = "User")]
[ChildActionOnly]
public ActionResult MainMenu()
{
return PartialView("MainMenu");
}
Кэширование работает нормально на корневой странице карты сайта. Однако, когда продолжительность кеша заканчивается и метод действия вызывается из более глубоких уровней, карта сайта не возвращается. Когда я отключаю обрезку безопасности или кэширование вывода, он отлично работает на всех уровнях.
Возможно ли, что метод действия, который возвращает панель навигации, вызывается, когда данные авторизации недоступны, и, следовательно, возвращает поврежденную карту сайта?