Да, кэширование подслоя может варьироваться по нескольким различным критериям по умолчанию. Вы можете использовать различные параметры для этого. Варианты:
- Зависит от данных
- Зависит от устройства
- Зависит от логина
- Зависит от параметров
- Зависит от строки запроса
- Зависит от пользователя
Подход для настройки здесь зависит от параметров, и вы сами определяете параметры. Это можно сделать в разделе «Сведения о презентации», где вы динамически назначаете подуровень для элемента (в нижней части свойств элемента управления есть раздел для определения параметров) или можете установить это с помощью кода C #. Вот пример использования кода C # для статического назначения подслоя в моем макете:
<h1>My website</h1>
<h2>My site is great</h2>
<sc:Sublayout ID="slMyControl" path="~/path/to/my/control.ascx" VaryByParm="true" Cachable="true" runat="server" />
(Следует отметить, что в приведенном выше коде атрибут для VaryByParam на самом деле равен VaryByParm
в Sitecore, что, очевидно, является опечаткой в их коде.)
Теперь в C # установите параметры программно:
slMyControl.Parameters = "myKey1=MyVal1&myKey2=myVal2";
Если вы можете получить Положение Луны в C #, тогда преобразуйте ее в строку и назначьте ее параметрам:
slMyControl.Parameters = "position=" + getMoonPosition().ToString();
Я недавно кэшировал календарь по месяцу и году, которые появляются в строке запроса. Простой пример без обработки ошибок:
slEventCalendar.Parameters = string.Format("m={0}&y={1}", Request.QueryString["m"], Request.QueryString["y"]);
Строка параметра, с которой вы в конечном итоге получаете, становится частью фактического ключа кеша. Связывание этого с другими зависит от параметров, просто делая более сложный ключ кэша с большим количеством критериев и, следовательно, с большим количеством кэшированных экземпляров. Общее правило заключается в том, что кэшируйте по наименьшему количеству необходимых критериев, что приведет к наибольшему использованию из этого кэшированного экземпляра.