在用户控件中用回发替换Asp.net输出缓存



我们有一个网站,所有页面都被输出缓存,即缓存在aspx级别,VaryByParam="*"。现在有一个要求是制作一个gallup控件,即一个小的"这个网站对你来说怎么样?"然后当用户点击一个答案时,结果就会显示出来。

gallup被实现为添加到主页面的用户控件,因此gallup可以添加到在cms中创建gallup的任何页面。问题是,输出缓存自然会缓存所有点击,所以当用户没有2次投票时,他会看到在第一次投票后计算的结果。

现在我正在尝试使用缓存替换。我在用户控件所在的地方添加了一个asp:Substition标记,动态加载控件并渲染它(使用这种方法http://coderwall.com/p/4ajzqq)。问题是,投票触发的回发永远不会被触发。显然,替换控件执行的方法是在页面生命周期之外加载的,或者加载得太晚了。

有什么想法吗?

谨致问候,Mathias

我通过跳过替换控件并正常使用用户控件来解决这个问题,因此gallup/question视图被缓存输出。然后在我添加的答案备选方案的点击处理程序中Response.Cache.SetNoServerCaching();这从输出缓存中免除了结果视图,因此它被更新了。

也可以使用Global.asax中的Response.Cache.SetNoServerCaching(),使用VaryByCustom。它只需要在Global.asax中检测页面是否是post-back。下面是一个代码示例。

最新更新