Как кешировать пользовательский элемент управления на один день - PullRequest
0 голосов
/ 03 января 2012

У меня есть пользовательский элемент управления, который рисует таблицу

У меня есть другой пользовательский элемент управления, который рисует изображения

Я хочу кэшировать оба пользовательских элемента управления в течение одного дня, это означает, что каждый день, еслитаблица посещений пользователей и изображения будут сгенерированы только в первый раз и сохранены в кэш-памяти и использованы весь день из кэша для любого последующего посещения.

Этот кэш должен зависеть от трех ключей, включая зарегистрированный ключ пользователя

Я написал собственный код для изображений, и он работает нормально, я храню эти изображения в папке.это без использования кэширования вывода.

Теперь я не имею представления о том, как сохранить таблицу в папке, поэтому я хочу реализовать кэширование для таблицы с использованием кэширования вывода пользовательского элемента управления.

Я не знаю, как кэшировать его на один день.

В соответствии с указаниями Рика я добавил следующую директиву в пользовательский элемент управления

<%@ OutputCache Duration="86400" VaryByParam="None" Shared="true"
    VaryByControl="Key1;Key2;Key3" %>

И написал следующий код на странице потребителя

DashboardControl dc = null;
Control control = (Control)Page.LoadControl(urlBuilder.GetCompleteURL().TrimEnd('?'));
  if (control is DashboardControl)
  {
    dc = control as DashboardControl;
  }
  else if (control is PartialCachingControl && ((PartialCachingControl)control).CachedControl != null)
  {
    dc = (DashboardControl)((PartialCachingControl)control).CachedControl;
  }

Но CachedControl всегда дает ноль, любая идея?

Ответы [ 3 ]

2 голосов
/ 03 января 2012

Попробуйте:

  <%@ OutputCache Duration="86400" VaryByParam="None" Shared="true"
      VaryByControl="Key1;Key2;Key3" %>

Где Key1, Key2 и Key3 - это свойства элемента управления, значение которого используется для изменения кэша.

Когда Control выводится в кэш, только его вывод помещается в кеш , а не сам Control.При последующих запросах, где используется выходной кэш, ссылки на Control будут нулевыми, поэтому вам нужно установить свойства элемента управления при первом обращении к нему.

Для кэшированных Control, LoadControl() вернет тип PartialCachingControl, который вы можете использовать для добавления результата в Page.Но самого класса Control там нет, поэтому вы не можете использовать эту ссылку для установки значений свойств или вызова методов.

2 голосов
/ 03 января 2012

Попробуйте использовать следующий пример кода для кэширования пользовательского элемента управления.Здесь вы должны изменить продолжительность в соответствии с вашими требованиями и именем пользовательского элемента управления в соответствии с вашим контролем:

    <%@ OutputCache Duration="60" VaryByParam="none" 
    VaryByControl="CategoryDropDownList" %>

Для получения дополнительной ссылки см .: http://msdn.microsoft.com/en-us/library/aa478965.aspx

0 голосов
/ 12 февраля 2014

Он всегда дает значение NULL, если элемент управления (PartialCachingControl) не добавляется на страницу, после добавления какого-либо пути к странице и визуализации элемента управления он предоставляет вам доступ через свойство CachedControl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...