Изменяет кэширование вывода на usercontrol по clientID - PullRequest
2 голосов
/ 05 октября 2011

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

Я думал об использовании VaryByCustom и пытался получить ClientID элемента управления, но не смог найти способ.

Есть ли способ вывести в кэш пользовательский контроль на основе ClientID или другой способ идентифицировать его по его положению в DOM?

Обновление: Я попытался добавить скрытое поле и установить кеширование вывода. Для примера я установил значение скрытого поля в Datetime.Now, но оно по-прежнему отображает тот же пользовательский контроль, а не два, которые различаются по содержанию.

* * 1010

Ответы [ 2 ]

2 голосов
/ 05 октября 2011

Один из способов может заключаться в том, чтобы скрыть поле со стороны сервера в элементе управления, вставить в него идентификатор клиента пользовательского элемента управления и затем использовать параметр VaryByControl с идентификатором скрытого поля.

Для получения дополнительной информации / параметров см. эту ссылку MSDN , в которой обсуждается та же проблема.

РЕДАКТИРОВАТЬ
Использование Datetime.Now.ToString() не является хорошей идеей по двум причинам!Если вы увидите фактическое значение для различных элементов управления, вы обнаружите, что оно будет одинаковым, потому что ToString будет иметь значение до секунд - все ваши экземпляры элемента управления на странице будут иметь почти одинаковое значение даты / времени, вероятно, различающееся в миллисекундахчто даст то же значение ToString().
Вторая проблема заключается в том, что DateTime.Now является недетерминированным.Чтобы кэширование работало, вам необходимо иметь детерминированное значение (значение, которое не изменяется при повторных вызовах) - в противном случае для каждого запроса страницы у вас будет другое значение, которое сделает кэш недействительным.Я предлагаю поставить идентификатор клиента пользовательского элемента управления в качестве значения.Еще одним способом было бы выставить свойство в элементе управления пользователя и установить для него порядковый номер, такой как 1,2,3 .. со страницы.

1 голос
/ 05 октября 2011

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

...