ASP.NET片段缓存--控件第二次为空

ASP.NET片段缓存--控件第二次为空,asp.net,caching,Asp.net,Caching,我有一个ascx控件,它工作得很好。它包含在一个较大的aspx页面中。我想把它放在片段缓存中,所以我在顶部添加了相应的CacheOutput指令。但是,现在在第二次加载页面时,基础aspx.cs文件上的控件将控制变量设置为null。我在网上找到了一些地方,上面说会发生这种情况,但我也没有找到访问控件的解决方案 我错过了什么 另外,我可以控制缓存在哪里吗?我可以将其缓存在浏览器缓存中而不是服务器上吗?问题1:输出缓存仅将HTML结果存储在服务器上。如果您想要在用户控件中交互或运行任何代码,则可能不

我有一个ascx控件,它工作得很好。它包含在一个较大的aspx页面中。我想把它放在片段缓存中,所以我在顶部添加了相应的CacheOutput指令。但是,现在在第二次加载页面时,基础aspx.cs文件上的控件将控制变量设置为null。我在网上找到了一些地方,上面说会发生这种情况,但我也没有找到访问控件的解决方案

我错过了什么

另外,我可以控制缓存在哪里吗?我可以将其缓存在浏览器缓存中而不是服务器上吗?

问题1:输出缓存仅将HTML结果存储在服务器上。如果您想要在用户控件中交互或运行任何代码,则可能不使用完全输出缓存。您可能希望查看较低级别的缓存,可能是数据库或对象缓存,或者在此缓存中嵌入另一个用户控件,该控件本身使用完全输出缓存,但外部用户控件不再使用

问题#2:“我可以控制缓存的位置吗?”如果使用输出缓存,则不会。这始终意味着服务器上的缓存。但是,缓存有很多不同的级别。您只能在浏览器中缓存完整的HTTP响应:单个HTML页面、CSS文件等。如果您只想在浏览器中缓存页面的一部分,但要使页面的其余部分动态,则必须使用某种JavaScript。HTML5本地存储,或通过具有适当缓存头的AJAX,或通过304 Not Modified响应进行响应

旁注:术语“片段缓存”在ASP.Net世界中更常被称为“部分缓存”

提示:这是两个问题,将来应该作为两个单独的问题来提问。 还有,这里有很多方法可以解决你的问题;如果您为您正在做的事情和您试图解决的性能问题提供更多的上下文,我们可以提供更具体的答案