ASP.net 中 OutputCache 指令各个参数的作用

ASP.NET 中,对于标有 runat=”server” 的控件来说,我们是不用,也不要指定其
name 属性值的。

大多数ASP.NET
服务器控件存储其属性值得方式是通过ViewState的方式存储的。
StateBag还具有对其中数据更改的跟踪过程(Tracking
ability)。是否进行跟踪的开关可以被设置成开或者关,当调用StateBag.TrackViewState()方法后跟踪开关将被开启。
如果是默认的方式,那么VIewState中的值会被序列化成一个基于Base64编码的字符串,然后存储在页面
中一个叫做_ViewState的隐藏变量中。
首先页面回传以后,整个Page将重新生成并且那些页面上声明的静态控件也都已经被解析添加到
以Page为根节点的控件树中,那些静态控件对应的静态声明的属性值也都被初始化。然后是OnInit阶段,在这个阶段ASP.NET会调用
TrackViewState方法,从此以后所有对控件属性的赋值操作都将导致被跟踪。接着就LoadViewState()方法被调用,这里那些从_ViewState中反序列化出来的值将被重新赋给对应的控件,由于在此之前TrackViewState()已经被调用了,_ViewState中包
含的数据对应的属性值都会被标记为Dirty。这样当调用SaveViewState的时候,这些属性值还是会被持久的保留到_ViewState中,这
样在页面的一次次回传和页面一次次的重新建立的过程中,这些控件的值就被保留下来了。
ASP.NET视图状态的第一个规则是,只有在你拥有其值是通过代码动态生成的部件的时候,才能实现视图状态效果。如果在*.aspx文件的<form>标签内硬编码值,这些项的状态总是通过回传来保存。即使通过给页面设定禁用视图。

使用@ OutputCache指令

一方面我们是通过其 id 来进行交互的。

我在Repeater里面使用了一个没有被绑定的TextBox.没有对它进行数据绑定,所以如果给Repeater指定数据源绑定之后,Textbox原来的值就会消失。好像不存在ViewState一样,需要自己另外保存。

使用@ OutputCache指令,能够实现对页面输出缓存的一般性需要。@
OutputCache指令在ASP.NET页或者页中包含的用户控件的头部声明。这种方式非常方便,只需几个简单的属性设置,就能够实现页面的输出缓存
策略。@ OutputCache指令声明代码如下。

二方面即使我们指定了 name
属性值,输出到客户端时也不一定是我们指定的值,由于各种原因,ASP.NET
会自动赋新值。

@ OutputCache指令代码

<%@ OutputCache CacheProfile =” ” NoStore= “True | False” Duration
=”#ofseconds” Shared =”True | False” Location =”Any | Client |
Downstream | Server | None | ServerandClient ” SqlDependency
=”database/table name pair | CommandNotification ” VaryByControl
=”controlname” VaryByCustom =”browser | customstring” VaryByHeader
=”headers” VaryByParam =”parametername” %>

如上所示,在@
OutputCache指令中,共包括10个属性,它们是CacheProfile、NoStore、Duration、Shared、
Location、SqlDependency、VaryByControl、VaryByCustom、VaryByHeader和
VaryByParam。这些属性将对缓存时间、缓存项的位置、SQL数据缓存依赖等各方面进行设置。下面简要介绍以上属性的基本概念。

CacheProfile

用于定义与该页关联的缓存设置的名称。是可选属性,默认值为空字符(“”)。需要注意的是,包含在用户控件中的@
OutputCache指令不支持此属性。在页面中指定此属性时,属性值必须与Web.config文件<outputCacheSettings>配置
节下的outputCacheProfiles元素中的一个可用项的名称匹配。如果此名称与配置文件项不匹配,将引发异常。

NoStore

该属性定义一个布尔值,用于决定是否阻止敏感信息的二级存储。需要注意的是,包含在用户控件中的@
OutputCache指令不支持此属性。将此属性设置为true等效于在请求期间执行代码“Response.Cache.SetNoStore();”。

Duration

用于设置页面或者用户控件缓存的时间。单位是秒。通过设置该属性,能够为来自对象的HTTP响应建立了一个过期策略,并将自动缓存页或用户控件输出。需要注意的是,Duration属性是必需的,否则将会引起分析器错误。

Shared

该属性定义一个布尔值,用于确定用户控件输出是否可以由多个页共享。默认值为false。注意,包含在ASP.NET页中的@
OutputCache指令不支持此属性。

Location

用于指定输出缓存项的位置。其属性值是OutputCacheLocation枚举值,它们是Any、Client、Downstream、None、
Server和ServerAndClient。默认值是Any,表示输出缓存可用于所有请求,包括客户端浏览器、代理服务器或处理请求的服务器上。需要注意的是,包含在用户控件中的@
OutputCache指令不支持此属性。

SqlDependency

该属性标识一组数据库/表名称对的字符串值,页或控件的输出缓存依赖于这些名称对。需要注意:SqlCacheDependency类监视输出缓存所依赖
的数据库中的表,因此,当更新表中的项时,使用基于表的轮询将从缓存中移除这些项。当通知(在SQL
Server
2005中)与CommandNotification值一起使用时,最终将使用SqlDependency类向SQL
Server
2005服务器注册查询通知。另外,SqlDependency属性的CommandNotification值仅在ASP.NET页中有效。控件只能将
基于表的轮询用于@ OutputCache指令。

VaryByControl

该属性使用一个分号分隔的字符串列表来更改用户控件的输出缓存。这些字符串代表在用户控件中声明的ASP.NET服务器控件的ID属性值。除非已经包含了VaryByParam属性,否则在@
OutputCache指令中,该属性是必需的。

VaryByCustom

用于自定义输出缓存要求的任意文本。如果赋予该属性值是browser,缓存将随浏览器名称和主要版本信息的不同而异。如果输入了自定义字符串,则必须在
应用程序的Global.asax文件中重写HttpApplication.GetVaryByCustomString方法。

VaryByHeader

该属性中包含由分号分隔的HTTP标头列表,用于使输出缓存发生变化。当将该属性设为多标头时,对于每个指定的标头,输出缓存都包含一个请求文档的不同版
本。VaryByHeader属性在所有HTTP
1.1缓存中启用缓存项,而不仅限于ASP.NET缓存。用户控件中的@
OutputCache指令不支持此属性。

VaryByParam

该属性定义了一个分号分隔的字符串列表,用于使输出缓存发生变化。默认情况下,这些字符串与用GET方法属性发送的查询字符串值对应,或与用POST方法
发送的参数对应。当将该属性设置为多参数时,对于每个指定的参数,输出缓存都包含一个请求文档的不同版本。可能的值包括“none”、“*”和任何有效的
查询字符串或POST参数名称。值得注意的是,在输出缓存ASP.NET页时,该属性是必需的。它对于用户控件也是必需的,除非已经在用户控件的@
OutputCache指令中包含了VaryByControl属性。如果没有包含,则会发生分析器错误。如果不需要使缓存内容随任何指定参数发生变化,
则可将该值设为“none”。如果要使输出缓存根据所有参数值发生变化,则将属性设置为“*”。

发表评论

电子邮件地址不会被公开。 必填项已用*标注