我们有一个站点(实际上是一个应用程序生成器),它在不同的场景中呈现了很多用户控件,
有一天,经理决定Output cache
在主页添加,
好的,一切都很好,请求响应非常快!
但另一方面,这种缓存也有一些麻烦:
假设我们有一个InsertForm User control
填充了一些实体,还有一个ListForm User Control
显示实体列表,所以你可以猜到会发生什么,实体填充正确但没有显示在列表中,为什么?因为输出缓存。
然后我们必须从缓存中排除这个用户控件,经过一些搜索我们找到了Donut Caching,看起来很好,
我们使用动态添加服务器控件来替换
大多数用户控件实现依赖于所有页面生命周期,其中一些在Init中执行,一些在Load中,一些在Render中,因此在大多数情况下我们都有一个占位符,我们所做的是:
并在 PreRender 中删除 placeHolder 中的所有控件以防止重复:
在某些情况下我们有一个很好的结果但是在某些实现中我们又遇到了麻烦,所有的Request
替换为HttpContext.Current.Request
和所有的Session
s 都转换为字段,但在某些情况下,比如 useWizard
我们仍然有异常:Request does not exist in this context
. 而在绑定事件中我们又遇到了麻烦,事件没有正确绑定,比如向导的下一步按钮点击事件。
毕竟我填写我们的方式是错误的,也许这在这种情况下是不切实际的,
你怎么看?
我们还有其他选择吗?
还是所有这些麻烦都可以解决?请问有什么建议吗?