Я использую пользовательский элемент управления с несколькими повторителями, привязанными к базе данных, в качестве меню для веб-сайта. Я использую OutputCache внутри элемента управления, поэтому его не нужно создавать заново каждый раз, когда пользователь меняет страницы.
Проблема в том, что на сайте есть бэк-офис, позволяющий менеджерам контента вносить изменения, в том числе те, которые изменяют меню веб-сайта. Пока единственный способ обновить меню - это либо подождать таймер кеша (не идеальный вариант), либо принудительно перезапустить пул приложений (еще менее идеальный вариант).
Я попытался использовать приведенный ниже код, который нашел в другой теме, чтобы получить элемент управления во время Page_Load и Page_PreRender, но он просто игнорирует новые значения и показывает кэшированные.
control = LoadControl("~/UserControls/Menu.ascx");
this.Controls.Add(control);
UserControls.Menu lMenu = null;
if (control is UserControls.Menu)
lMenu = (UserControls.Menu)control;
else if (control is PartialCachingControl && ((PartialCachingControl)control).CachedControl != null)
lMenu = (UserControls.Menu)((PartialCachingControl)control).CachedControl;
if (lMenu != null)
lMenu.RefreshMenu(); // Assigns datasource and databinds the repeaters.
Я также пытался HttpResponse.RemoveOutputCacheItem("/UserControls/Menu.ascx")
, но, похоже, он тоже не работает.
Есть ли способ сделать недействительной кэшированную версию и заставить сервер заново создать пользовательский элемент управления?