如何不缓存ASP.NET用户控件?

6
我在使用OutputCache来优化我的页面,但是我不想缓存特定的用户控件,因为它与用户登录相关(如果我访问该页面,我将以另一个用户的身份查看该页面)。
如何实现这一点?
3个回答

11

就我个人而言,我使用VaryByCustom属性来为已登录和未登录的用户提供不同的缓存页视图:

<%@ OutputCache VaryByCustom="IsLoggedIn" Duration="30" VaryByParam="*" %>

然后在 global.asax 中放置以下代码:

public override string GetVaryByCustomString(HttpContext context,
    string arg)
{
    if (arg == "IsLoggedIn")
    {

        if (context.Request.IsAuthenticated)
        {
            return "Logged in: " + context.User.Identity.Name;
        }
        else
        {
            return "Not Logged In";
        }

    }
    else
    {
        return base.GetVaryByCustomString(context, arg);
    }

}

我想简单地提出一个建议:替换控件怎么样?

http://msdn.microsoft.com/en-us/library/ms228212.aspx

根据 MSDN 网站上的介绍:

替换控件让您能够创建可以动态更新并集成到缓存页中的页面区域... 替换控件为部分页面缓存提供了简化的解决方案。 您可以输出缓存整个页面,然后使用替换控件指定不适用缓存的页面部分。

我个人从未使用过替代控件,但前几天刚好查了一下,它似乎可以在已缓存的页面输出中注入更新的内容。


1
你可以缓存一个页面和缓存一个用户控件,但是除了一个用户控件之外,你不能仅缓存一个页面。当用户控件运行时,整个页面必须运行。你必须使输出缓存器为页面识别不同的用户。
如果用户标识存储在Cookie中,你可以使用 "VaryByHeader =“ Cookie”" 为每组Cookie缓存页面。你可以使用 "VaryByCustom =“ SomeString”" 并实现对 "SomeString" 的检查,在 Global.asax 中的 GetVaryByCustomString 方法中进行自定义用户身份验证检查。

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接