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

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

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

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

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

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

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

2 ответа

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

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

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

Другие вопросы по тегам