我正在将用户控件与绑定到数据库的多个转发器用作网站菜单。我在控件内部使用了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")
,但它似乎也不起作用。
是否有办法使缓存版本无效并强制服务器重新创建用户控件?