使用LoadControl显示缓存的WebUserControls

时间:2012-02-15 11:08:44

标签: c# asp.net outputcache loadcontrol

这是我在这里的第一篇文章。

我编写了一个CMS,它允许开发人员以WebUserControls的形式编写自己的插件。这些插件可以由用户插入(通过TinyMCE)到内容中。这是使用LoadControl方法以编程方式完成的,添加到控件层次结构并设置其属性。到目前为止一切都很好。

我想允许开发人员在他们的WebUserControls上使用OutputCache,但是这些控件需要通过WebUserControl的属性进行缓存。例如开发人员编写了一个WebUserControl color.ascx,它具有属性Color(红色|绿色|蓝色),因此根据此属性的值,缓存可以存储红色,绿色和蓝色版本。

我遇到的问题是,一个页面可以有多个,比方说三个,color.ascx控件(红色,绿色和蓝色)动态加载LoadControl。在缓存后,LoadControl方法正确返回PartialCachingControl,但在刷新页面时,它始终是缓存中的最后一个版本,即页面显示3蓝色而不是红色,绿色和蓝色。

是否有一种方法可以使用LoadControl(或通过其他方法)从缓存中加载正确的版本,即使用Color属性,以及如何使用OutputCache确保基于WebUserControls属性将其保存到缓存中?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

看来,你有一个经典的LoadControl缓存问题。在程序中从同一个地方(例如for-each循环)调用,对于同一个控件,如果需要缓存,则此函数始终返回相同的实例。为避免这种情况,在您的情况下,只需进行3次不同的调用 - 在您的应用程序中使用3行不同的代码

答案 1 :(得分:0)

我设法使用DynamicMethod解决了这个问题。完整的描述和代码可以在我解决之后写的博客条目中找到:

http://www.tommycode.se/2012/04/outputcache-on-dynamically-loaded.html