我有一个输出缓存在用户控件中的项目列表。如果管理员登录,我想为每个项目添加一个删除按钮。
如果没有输出缓存,我会检查当前用户是否是管理员角色的成员并相应地显示/隐藏按钮。由于列表现在是输出缓存的,我不能这样做。
我查看了替换控件,但首先它返回一个字符串而不是完整控件,其次它是一个静态方法,所以我无法访问 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 方法永远不会被调用。