我有一个使用输出缓存的Asp.Net Web表单页面。
该代码以编程方式在基本页面内设置。
但是,我最近一直在测试页面,以期使用“甜甜圈”缓存-使用替代元素。
我设置了一个简单的测试。
<section>
<div>
<asp:Substitution ID="subTime" runat="server" MethodName="GetTime" />
</div>
<div>
<asp:Label ID="lblTime" runat="server"></asp:Label>
</div>
</section>
protected void Page_Load(object sender, EventArgs e)
{
lblTime.Text = DateTime.Now.ToString();
}
public static string GetTime(HttpContext context)
{
return DateTime.Now.ToString();
}
首先,我将输出缓存代码直接添加到页面中。
<%@ OutputCache VaryByParam="None" VaryByHeader="User-Agent" Location="Any" Duration="30" %>
导航到其他页面并返回时,最上面的(甜甜圈缓存)时间会更新,而标签时间会保持预期的不变。它还在F5上更新,而标签又保持不变。
我相信这是正确的行为。
但是,当我尝试以编程方式设置输出缓存时,会得到不同的行为。
protected void Page_Load(object sender, EventArgs e)
{
var cache = Response.Cache;
cache.SetExpires(DateTime.Now.AddSeconds(30));
cache.SetSlidingExpiration(true);
cache.SetCacheability(HttpCacheability.ServerAndPrivate);
cache.SetValidUntilExpires(true);
lblTime.Text = DateTime.Now.ToString();
}
现在,直到缓存过期(30秒)为止,两个时间都不会更新,并且F5每次都会更新两次。
到目前为止,我已经尝试过SetCacheability属性的各种形式,并删除了SetValidUntilExpires,但是无法更改此行为。
有什么想法吗?