Я изучаю кеширование вывода ASP.NET.
Я собрал очень простую страницу (см. Ниже). Тест бесполезен; это просто для иллюстрации поведения, о котором идет речь.
<%@ Page Language="C#" AutoEventWireup="true" %>
<%@ OutputCache Duration="60" VaryByParam="none" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
TextBox1.Text = Guid.NewGuid().ToString();
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
</div>
</form>
</body>
</html>
Когда страница загружается в первый раз, текстовое поле пусто (как и ожидалось).
При первом нажатии кнопки текстовое поле заполняется SOMEGUID. Из моего чтения я ожидал, что он останется пустым ... поскольку страница должна была обслуживаться из кеша ...?
Для последующих нажатий кнопки содержимое текстового поля остается как SOMEGUID (до тех пор, пока не истечет срок действия кеша, и в этом случае это будет SOMEOTHERGUID).
Если я загружаю страницу на другую вкладку браузера (путем копирования и вставки URL-адреса), тексбокс будет пуст.
Если я нажму кнопку на новой странице, содержимое текстового поля изменится на SOMEGUID и останется таким (до тех пор, пока не истечет срок действия кеша, и в этом случае это будет SOMEOTHERGUID).
Итак, похоже, что в кеше есть две версии; один для только что загруженной страницы и второй для результата первого нажатия кнопки? Что случилось? Можно ли это предотвратить (в экспериментальных целях)? Я попытался установить для атрибутаvarByControl значение «none», но это не помогло ...
Это похоже на несколько других вопросов и почти полностью повторяет кэширование вывода и обратную передачу. Однако из подобных вопросов, которые я обнаружил, ни один не включает полный образец кода, иллюстрирующий поведение, и ни один не имеет принятых ответов.
ОБНОВЛЕНИЕ: я до сих пор не проработал и не нашел статью, в которой это обсуждается. Я включил трассировку страницы, чтобы посмотреть, проливает ли это хоть какой-то свет. Однако при трассировке для каждой обратной передачи создается новый GUID. Все еще гуглил ...