还是先来过一遍@outpucache所有的属性,共用11个属性,这个指令可以用于页面(.asp教程x)和用户控件(.ascx)
属性
duration
页或用户控件进行缓存的时间,单位秒,可以在页面或控件上设置该属性来建立一个缓存的过期策略,该属性是必须的。
varybyparam
分号分割的字符串列表,是否根据某个参数变化,和varybycontrol二者必须有一。如果不变化,可将值设置为none,否则设置为*,或者变化的参数名称(get或post的参数)。
varybycontrol
分号分割的字符串列表,只限于用户控件,串列表的值是服务器控件标识。
location 缓存的位置,默认是any,该属性仅限于.aspx文件,可选项是any,client,downstream,server,none,serverandclient
shared 该属性仅限于.ascx文件,默认为false,用户控件是否可以由多个页面共享。
cacheprofile 你可以在web.config中配置一个缓存设置,这样以后就可以共用这个缓存设置,方便统一修改,不支持用户控件
nostore 这个不是太清楚什么用,msdn上说是决定是否对敏感信息辅助存储.
varybycontentencodings 同样也是逗号分隔的字符串列表,根据accept-encodeing http头来决定是否缓存不同的版本。
varybyheader 根据http headers来决定是否进行分版本存储,同样也是分号分隔的字符串列表
varybycustom 通过这个属性,你可以自定义怎么来缓存页面
sqldependency 为当前缓存指定一个依赖项,当发生变动时从缓存区中删除掉当前页面或控件的缓存。
就是上面列的着11个属性,大多数时候,只需要duration和varybyparam这两个属性就搞定了,比如:
<%@ outputcache duration="100" varybyparam="none" %>
上面指令没有指定location默认是客户端和服务器端都缓存,这个时候如果改变页面的querystring会被忽略,直接从缓存中返回结果,所以在需要根据参数返回不同内容的页面千万不要这么设置,可以采用以下方式:
<%@ outputcache duration="100" varybyparam="*"%>
上面关于duration属性,说是必须的,其实也不然,当你不想用缓存是就不必写^_^,如下,禁用当前页面缓存:
<%@ outputcache location="none" %>