У меня есть страница веб-форм Asp.Net, в которой используется кэширование вывода.
Код задан программно внутри базовой страницы.
Однако недавно я тестировал страницу счтобы использовать кэширование пончика - с помощью элемента подстановки.
Я настроил простой тест.
<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, но не смог изменить это поведение.
Есть идеи?