输出缓存自定义控件(服务器控件)

时间:2010-09-17 13:59:22

标签: asp.net controls outputcache

我遇到了关于输出缓存服务器控件的提示,但还没有找到明确的答案:服务器控件的输出是否可以缓存(与缓存用户控件的方式相同)?

我遇到的建议涉及缓存数据(不是真正的输出缓存),或建议设置response.cache选项。理想情况下,我希望能够将服务器控件拖到页面上,并使用与outputcache指令相同的名称设置属性:

示例:

<cc1:MyCustomControl ID="ctl1" runat="server" CacheDuration="200" VaryByCustom="user" />

我打算深入研究框架,看看输出缓存是如何工作的,但希望找到一些信息让我开始。根据我的有限理解,解析器决定是否缓存页面/用户控件。由于未解析服务器控件,因此无法停止执行代码。我想我可以初始化一个“IsInCache”布尔值,并确保所有方法在执行代码之前检查该var。这不会完全消除服务器控制的执行,但它可以通过避免调用数据库和将数据绑定到控件来充分提高性能。

我仍在使用.NET 3.5,并且没有太多时间来探索.NET 4.0中的OutputCache提供程序模型。也许在最新版本的框架中有一个解决方案?

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我也在寻找这个,我想我会在我的网页搜索中添加解决方案。有一个名为PartialCaching的属性应用于服务器端/自定义控件,以实现与ascx和aspx模板中使用的OutputCache指令相同的效果。它也需要相同的参数(VaryByParameter等)。例如:

[PartialCaching(1000, "foo", null, null)]
public class ClientScriptVariableBlock : Control {
  ...
}

ASP管道将此视为与模板属性相同,因此最终结果是相同的。这很有价值(在我的情况下),因为我可以在Web项目本身之外创建可以缓存的公共服务器控件。 ASCX模板在外部程序集中不能很好地工作:)