Работая над проектом на asp.net, я столкнулся с неприятной проблемой при использовании кеша в CustomControl. При использовании этого типа кэширования:
Во время PostBack я получил неверные данные из кеша.<%@ OutputCache Duration="86400" VaryByParam="MenuID" %> * This source code was highlighted with Source Code Highlighter.
Я очень долго не мог понять, почему так происходит, перерыл кучу кода, а потом подумал, что это может быть баг.
Я поискал в Интернете на различных форумах и нашел решение.
Решение оказалось очень простым — достаточно добавить в элемент управления скрытый ввод:
После этого все заработало как надо.<%@ OutputCache Duration="86400" VaryByParam="MenuID" %> <input type="hidden" name="MenuID" value="<%= Request.QueryString["MenuID"] ?? "0" %>" /> * This source code was highlighted with Source Code Highlighter.
Не знаю, баг это или фича =) Я надеюсь, что это помогает кому-то.
UPD: VaryByParam — определяет условное кэширование на основе значений строки запроса во время GET или параметров во время POST. Значения необходимо перечислять через точку с запятой.
Похоже, что условное кэширование происходит только на сервере, потому что независимо от значения VaryByParam в http-заголовке Vary равен «*».
VaryByParam – обязателен, если не указан атрибут VaryByControl. VaryByParam может быть равен «none» и тогда условное кэширование параметров не происходит, либо VaryByParam может быть равно «*» и тогда условное кэширование выполняется для всех параметров.
Спасибо XaocCPS Теги: #ASP.NET #outputCache #CustomControl #Chulan
-
Переход От Тестировщика К Менеджеру Проектов
19 Oct, 24 -
Субстики #83
19 Oct, 24 -
Выпуск Фреймворка Qt 5.8
19 Oct, 24