Обновить содержимое выходного кэшированного пользовательского элемента управления - PullRequest
0 голосов
/ 31 октября 2018

Я использую пользовательский элемент управления с несколькими повторителями, привязанными к базе данных, в качестве меню для веб-сайта. Я использую 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"), но, похоже, он тоже не работает.

Есть ли способ сделать недействительной кэшированную версию и заставить сервер заново создать пользовательский элемент управления?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...