如果需要,可以按以下条件选择需要缓存的控件:
(1)某控件的属性已改变
(2)由页面级输出缓存所支持的任何一种页面或控件状态改变
一旦对某些控件进行了缓存,使用它们的几百个页面就可以共享这些控件,而不再需要为每个页面保留单独的控件缓存版本。
实现
片段缓存使用的语法与页面级输出缓存一样,但其应用于用户控件(.ascx文件)而不是Web窗体(.aspx文件)。除了Location属性,对于OutputCache在Web窗体上支持的所有属性,用户控件也同样支持。用户控件还支持名为VaryByControl的OutputCache属性,该属性将根据用户控件(通常是页面上的控件,例如,DropDownList)的成员的值改变该控件的缓存。如果指定了VaryByControl,可以省略VaryByParam。最后,在默认情况下,对每个页面上的每个用户控件都单独进行缓存。不过,如果一个用户控件不随应用程序中的页面改变,并且在所有页面都使用相同的名称,则可以设置参数Shared的值为“true”,该参数将使用户控件的缓存版本供引用该控件的所有页面使用。
示例
该示例将缓存用户控件60秒,并且将针对查询字符串的每个变动、针对此控件所在的每个页面创建单独的缓存条目。<%@ OutputCache Duration="60" VaryByParam="*" %>
该示例将缓存用户控件60秒,并且将针对CategoryDrop、DownList控件的每个不同的值、针对此控件所在的每个页面创建单独的缓存条目。<%@ OutputCache Duration="60" VaryByParam="none" VaryByControl="CategoryDropDownList" %>
最后,该示例将缓存用户控件60秒,并且将针对每个浏览器名称和主要版本创建一个缓存条目。然后,每个浏览器的缓存条目将由引用此用户控件的所有页面共享(只要所有页面都用相同的ID引用该控件即可)。<%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser" Shared="true" %>