У меня есть список элементов, которые кэшируются на выходе в пользовательском элементе управления. Если администратор вошел в систему, я хотел бы добавить кнопку удаления для каждого из элементов.
Без кэширования вывода я проверяю, является ли текущий пользователь членом роли администратора, и соответственно показываю / скрываю кнопку. Поскольку список теперь выводится в кэш, я не могу этого сделать.
Я посмотрел на элемент управления замещением, но, во-первых, он возвращает строку, а не полный элемент управления, во-вторых, это статический метод, поэтому я не могу получить доступ к ItemId, который я добавил как свойство для каждого элемента в списке.
Как правильно добавить кнопку удаления в мой список?
UPDATE
Я попытался добавить следующее к page_load моей страницы, а также к пользовательскому элементу управления:
this.Response.DisableKernelCache();
HttpCacheValidateHandler val = new HttpCacheValidateHandler(ValidateCache);
this.Response.Cache.AddValidationCallback(val, null);
и
public static void ValidateCache(HttpContext context, Object data, ref HttpValidationStatus status)
{
if (context.User.IsInRole("administrator"))
status = HttpValidationStatus.Invalid;
else
status = HttpValidationStatus.Valid;
}
Я украсил свой пользовательский элемент управления:
[PartialCaching(3600, VaryByCustom = "Page", VaryByParams = "paging")]
Я создаю сайт с открытым исходным кодом CMS Umbraco, поэтому VaryByCustom = "Page" изменяет кэш в соответствии с текущим узлом документа в CMS. VaryByParams = "paging" изменяет список с помощью параметра "paging" (page1, page2 и т. Д. В списке)
Метод ValidateCache никогда не вызывается.