Добавьте кнопку обратной передачи в элемент управления пользователя с кэшированием вывода - PullRequest
1 голос
/ 02 января 2012

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

Без кэширования вывода я проверяю, является ли текущий пользователь членом роли администратора, и соответственно показываю / скрываю кнопку. Поскольку список теперь выводится в кэш, я не могу этого сделать.

Я посмотрел на элемент управления замещением, но, во-первых, он возвращает строку, а не полный элемент управления, во-вторых, это статический метод, поэтому я не могу получить доступ к 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 никогда не вызывается.

...