Использование LoadControl для отображения кешированных элементов управления WebUserControl

Это мой первый пост здесь.

Я написал CMS, которая позволяет разработчикам писать свои собственные плагины в форме WebUserControls. Эти плагины могут быть вставлены (через TinyMCE) в контент пользователями. Это делается программно с использованием метода LoadControl, добавляющего в иерархию элементов управления и устанавливающего его свойства. Пока все хорошо.

Я хочу разрешить разработчикам использовать OutputCache в своих элементах управления WebUserControl, однако эти элементы управления необходимо кэшировать с помощью свойств элемента управления WebUserControl. например разработчик написал файл WebUserControl color.ascx, который имеет свойство Color (Red | Green | Blue), поэтому в зависимости от значения этого свойства кеш может хранить красную, зеленую и синюю версии.

Моя проблема заключается в том, что на странице может быть несколько, скажем, три элемента управления color.ascx (красный, зеленый и синий), динамически загружаемых с помощью LoadControl. После кэширования метод LoadControl правильно возвращает PartialCachingControl, но при обновлении страницы это всегда последняя версия из кеша, то есть на странице отображается 3 синих цвета вместо красного, зеленого и синего.

Есть ли способ с помощью LoadControl (или каким-либо другим способом) загрузить правильную версию из кеша, то есть с помощью свойства Color, и как мне использовать OutputCache, чтобы гарантировать, что он сохраняется в кеш на основе свойств WebUserControls?

Спасибо за вашу помощь.


person KowDot    schedule 15.02.2012    source источник


Ответы (2)


Похоже, у вас классическая проблема с кешированием LoadControl. Вызываемая из одного и того же места (например, для каждого цикла) в вашей программе, для одного и того же элемента управления эта функция всегда возвращает один и тот же экземпляр, если требуется кеш. Чтобы этого избежать, в вашем случае просто сделайте 3 разных вызова - 3 разные строки кода в вашем приложении.

person Alex D'    schedule 16.02.2012
comment
Извини, что меня не было на пару дней. Спасибо за ваш комментарий, но для меня это не имеет смысла. Не думаю, что вы поняли мой вопрос. У вас есть ссылка, объясняющая, что вы имеете в виду? - person KowDot; 18.02.2012
comment
Я использовал это в своем приложении: LoadControl - person Alex D'; 08.03.2012

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

http://www.tommycode.se/2012/04/outputcache-on-dynamically-loaded.html

person tommycode    schedule 12.04.2012