Я изучаю кэширование вывода 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-адреса), то texbox пуст.
Если я нажму кнопку на новой странице, содержимое текстового поля изменится на SOMEGUID и останется таким образом (до истечения срока действия кеша, в этом случае это SOMEOTHERGUID).
Итак, в кэше, по-видимому, две версии; один для только что загруженной страницы и второй результат для первого нажатия кнопки? Что происходит? Могу ли я предотвратить это (для экспериментальных целей)? Я попытался установить атрибут variableByControl на «none», но это не повлияло ...
Это похоже на несколько других вопросов и почти точный дубликат output Caching and postback. Однако из похожих вопросов, которые я нашел, ни один из них не содержит полный образец кода для иллюстрации поведения, и никто не принял ответы.
ОБНОВЛЕНИЕ: Я все еще не работал или нашел статью, в которой это обсуждается. Я перешел на страницу, чтобы увидеть, не проливает ли свет. Тем не менее, с отслеживанием нового GUID генерируется для каждой обратной передачи. Тем не менее ... прибегая к помощи
[Этот ответ] (http://stackoverflow.com/a/2417947/66849) утверждает, что выходной кеш использует либо данные формы, либо параметры строки запроса. Это объясняет поведение, которое вы испытываете. – PHeiberg