Работая над одним проектом на asp.net, столкнулся с неприятной проблемой при использование кэша в CustomControl. При использовании данного вида кэширования:
во время PostBack'а я получал из кэша неверные данные. Очень долго не мог понять из-за чего это происходит, перелопатил кучу кода, после чего подумал, что это может быть баг. Поискал в интернете по разным форумам и нашёл решение.
Решение оказалось очень простое — просто добавить скрытый input в контрол:
После этого всё заработало как и надо. Вот уж не знаю баг это или фича =)
Надеюсь это кому-нибудь да и поможет.
UPD: VaryByParam – задает условное кэширование основанное на значениях строки запроса при GET или параметров при POST. Значения должны перечисляться через точку с запятой. Похоже, что условное кэширование происходит только на сервере, потому что вне зависимости от значения VaryByParam в http-заголовок Vary равен «*». VaryByParam – обязателен к указанию, если не задан атрибут VaryByControl. VaryByParam может быть равен «none» и тогда условного по параметрам кэширования не происходит, либо VaryByParam может быть равен «*» и тогда условное кэширование производится по всем параметрам.
Спасибо XaocCPS
<%@ OutputCache Duration="86400" VaryByParam="MenuID" %>
* This source code was highlighted with Source Code Highlighter.
во время PostBack'а я получал из кэша неверные данные. Очень долго не мог понять из-за чего это происходит, перелопатил кучу кода, после чего подумал, что это может быть баг. Поискал в интернете по разным форумам и нашёл решение.
Решение оказалось очень простое — просто добавить скрытый input в контрол:
<%@ 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