OutputCache表现得很奇怪

时间:2009-03-22 21:51:30

标签: c# .net asp.net caching

protected void Page_Load(object sender, EventArgs e)
{Label1.Text = DateTime.Now.ToString();}

如果我编译了这个新创建的应用程序后,浏览器B1就是 首先请求Cache.aspx,然后是接收页面上显示的时间 是10.16:20。 如果,比如10秒后,我刷新B1的Cache.aspx(点击一下 按钮导致回发),然后时间10.16.30将显示,然后打开 所有后续回发10.16.30将始终显示(直到1 小时过去了)。 如果在B1首先请求Cache.aspx后几分钟,浏览器B2也是如此 请求同一页面,然后收到第一页的页面 时间,B2的Cache.aspx将显示时间10.16.20,并且全部显示 随后将显示B2的回发时间10.16:30。

A)因此,Asp.net似乎生成了两个缓存版本 Cache.aspx(因此代码执行两次),给出一个缓存页面 到第一次请求Cache.aspx的浏览器,第二次 缓存页面被提供给只刷新其Cache.aspx的浏览器?

B)由于我的书从未提及过这样的行为,我想知道你是否 得到相同的行为或我的网络环境再次“独特”?

C)创建同一页面的两个副本(因此执行代码两次) 好像是浪费时间,为什么Asp.Net这样运作 - 它背后一定有一些推理/好处吗?

谢谢

3 个答案:

答案 0 :(得分:2)

一个完整的猜测,但可能是缓存被整体请求隔离(查询字符串args等)...即使“none”关闭键/值对,可能只是“GET”仍被计算与“POST”不同???

尝试使用简单链接(<a href...>等)而不是ASP.NET按钮。

答案 1 :(得分:1)

我只是试着用它玩了一下,似乎Marc的预感是正确的,缓存依赖于方法(GET / POST)。

但我记得做过这样的小演示(使用ASP.NET 2),我很确定这不是以前的样子...... 所以它可能在ASP.NET 3.5和/或SP1中发生了变化,但我找不到任何提及。

至于这有多糟糕我不完全确定,我可以想到赞成和反对。

答案 2 :(得分:0)

如果我尝试 if(ispostback) 开始      response.cache.setcachebility(非缓存) 端

然后按钮点击每次都会更新标签。