В PHP вы можете ссылаться на переменные, используя сигил и строковый литерал или переменную, содержащую имя переменной, например:
${'foo'} = 'test';
echo $foo;
Это выведет «test». Странная вещь в этом поведении состоит в том, что вы также можете использовать не-строки в качестве имен переменных, например:
${array()} = 'test';
echo ${array()};
${NULL} = 'test';
echo ${NULL};
Теперь у нас есть переменные с именем array () и даже NULL! Все содержат строку «тест».
Верно, дело в том, что вы меняете параметром NO, поэтому html ответа на первый запрос кэшируется и обслуживается в течение следующих 10 минут (теоретически). Если вы хотите кэшировать GET, но обрабатывать разные POST, вам следует варьировать параметры POST.
Позвольте мне привести вам пример. У вас есть текстовый ввод, используемый для отправки электронного письма с его содержимым в POST. Если вы измените это имя входа, каждый запрос в течение периода кэширования с разными значениями для этого ввода текста попадет в ваш обработчик и обработает отправку электронной почты.
С другой стороны, вы можете отличаться на *, но тогда вы потеряете Кэширование в режиме ядра.
Вы правы в своих предположениях.
Ваша директива OutputCache сообщает механизму кэширования вывода кэшировать всю отображаемую страницу для определенного URL на 600 секунд.
В вашем простом примере вы, вероятно, не используете какие-либо строки запроса, однако объявление VaryByParam в директиве позволяет вам указать параметр строки запроса, который обеспечивает отдельное кэширование каждого значения этого параметра. Например, если у вас есть:
<%@ OutputCache Duration="600" VaryByParam="ProductID"%>
, тогда эти три разных URL-адреса будут кэшироваться по отдельности, а изменение значения параметра «ProductID» на что-то еще не кэшированное обеспечит обработку и отображение страницы в ASP.NET. время выполнения правильно:
http://www.example.com/viewproduct.aspx?ProductID=123
http://www.example.com/viewproduct.aspx?ProductID=3
http://www.example.com/viewproduct.aspx?ProductID=67
В вашем примере при нажатии кнопки, страница уже была ранее отрисована (и кэширована), и когда вы отправляете обратно, нет никакой разницы в URL-адресе, который вы отправляете обратно и эффективно перезагружаете, поэтому среда выполнения ASP.NET отобразит вам кешированную страницу, не переходя в процессе его повторного рендеринга.
Помимо изменения значения параметра «VaryByParam», директива OutputCache представляет собой подход к кэшированию страниц по принципу «все или ничего». Однако в директиве есть атрибут "VaryByContol", который может использоваться только в пользовательских элементах управления ASP.NET, а не на полноценной веб-странице ASP.NET.
Из вашего вопроса это больше похоже на то, что вам нужно исследовать частичное кеширование страниц. Либо это, либо механизм аннулирования кеша при возникновении какого-либо события. Обычно это делается путем добавления «зависимости кеша».
Для этого могут помочь следующие ссылки:
Кэширование частей страницы ASP.NET
Совет / прием: Реализуйте «кольцевое кэширование» с помощью функции замены выходного кэша ASP.NET 2.0.
Программное удаление Страница из OutputCache
Что вам нужно, так это подстановка после кеширования: