0

这是我在此的头一篇博文。

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

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

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

LoadControl(或通过其他方式)有没有办法从缓存中加载正确的版本,即使用 Color 属性,我应该如何使用 OutputCache 来确保它基于 WebUserControls 属性保存到缓存中?

谢谢你的帮助。

4

2 回答 2

0

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

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

于 2012-04-12T20:34:08.793 回答
0

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

于 2012-02-16T07:59:23.757 回答