从输出缓存中排除动态呈现的用户控件

时间:2013-05-28 14:02:24

标签: asp.net outputcache dynamic-usercontrols donut-caching partial-caching

我们有一个站点(实际上是一个Application Builder),它在不同的场景中呈现了很多用户控件,

有一天,经理决定在主页面添加Output cache

好的,一切都很好,请求反应非常快!

但另一方面,这种缓存有一些麻烦:

假设我们有一个填充某些实体的InsertForm User control和一个显示实体列表的ListForm User Control,那么你可以猜出发生了什么,实体填充正确但未在List中显示,为什么?因为输出缓存。

然后我们必须从缓存中排除这个用户控件,经过一些搜索我们发现Donut Caching,看起来非常好,

我们使用Add dynamically server control to Substitution

大多数用户控件实现都取决于所有页面生命周期,其中一些在 Init 中,一些在加载中的一些呈现,所以在大多数情况下我们都有一个占位符,我们所做的是:

enter image description here

enter image description here

在PreRender中删除placeHolder中的所有控件以防止重复:

enter image description here

在某些情况下我们有一个好的结果但是在某些实现中我们又遇到麻烦,所有Request都替换为HttpContext.Current.Request并且所有Session都转换为字段,但是在某些情况下,例如使用Wizard,我们仍有异常:Request does not exist in this context。 在绑定事件中,我们再次遇到麻烦,事件没有正确绑定,比如向导下一个按钮单击事件。

毕竟我填写错误,可能这在这种情况下不实用,

你怎么看?

我们还有其他选择吗?

或所有这些麻烦都可以解决?有什么建议吗?

1 个答案:

答案 0 :(得分:-1)