你的假设是正确的。
您的 OutputCache 指令告诉输出缓存机制为特定 URL缓存整个呈现页面 600 秒。
在您的简单示例中,您可能没有使用任何查询字符串,但是,指令中的 VaryByParam 声明允许您指定查询字符串参数,以确保单独缓存该参数的每个不同值。例如,如果您有:
<%@ OutputCache Duration="600" VaryByParam="ProductID"%>
那么这三个不同的 URL 将被单独缓存,并且将“ProductID”参数的值更改为尚未缓存的值将确保页面由 ASP.NET 运行时正确处理和呈现:
http://www.example.com/viewproduct.aspx?ProductID=123
http://www.example.com/viewproduct.aspx?ProductID=3
http://www.example.com/viewproduct.aspx?ProductID=67
在您的示例中,在您的按钮单击时,该页面之前已经呈现(并缓存)并且当您再次回发时,您回发并有效重新加载的 URL 没有区别,因此,ASP.NET 运行时将向您显示缓存的页面,而无需重新渲染它。
除了通过更改“VaryByParam”参数的值之外,OutputCache 指令在页面缓存方面是相当多的“全有或全无”方法。但是,该指令有一个“VaryByContol”属性,它只能用于 ASP.NET 用户控件,而不是一个完整的 ASP.NET 网页。
从您的问题来看,听起来您更像是需要调查部分页面缓存。当某些事件发生时,该机制或使缓存无效的机制。这通常是通过添加“缓存依赖项”来完成的。
为此,以下链接应该有所帮助:
缓存 ASP.NET 页面的部分
提示/技巧:使用 ASP.NET 2.0 输出缓存替换功能实现“甜甜圈缓存”以
编程方式从 OutputCache 中删除页面