1

我有一个输出缓存在用户控件中的项目列表。如果管理员登录,我想为每个项目添加一个删除按钮。

如果没有输出缓存,我会检查当前用户是否是管理员角色的成员并相应地显示/隐藏按钮。由于列表现在是输出缓存的,我不能这样做。

我查看了替换控件,但首先它返回一个字符串而不是完整控件,其次它是一个静态方法,所以我无法访问 ItemId,我已将其作为属性添加到列表中的每个项目.

将删除按钮添加到我的列表的正确方法是什么?

更新 我尝试将以下内容添加到页面的 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”-url 参数(列表中的 page1、page2 等)改变列表

ValidateCache 方法永远不会被调用。

4

0 回答 0