ASP.NET 2.0的Page指令
ASP.NET指令在每个ASP.NET页面中都有。使用这些指令可以控制ASP.NET页面的行为。下面是Page指令的一个例子:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb"
Inherits="_Default" %>
在ASP.NET页面或用户控件中有11个指令。无论页面是使用后台编码模型还是内置编码模型,都可以在应用程序中使用这些指令。
基本上,这些指令都是编译器编译页面时使用的命令。把指令合并到页面中是很简单的。指令的格式如下:
<%@ [Directive] [Attribute=Value] %>
在上面的代码行中,指令以<%@开头,以%>结束。最好把这些指令放在页面或控件的顶部,因为开发人员传统上都把指令放在那里(但如果指令位于其他地方,页面仍能编译)。当然,也可以把多个属性添加到指令语句中,如下所示:
<%@ [Directive] [Attribute=Value] [Attribute=Value] %>
表3-3描述了ASP.NET 2.0中的指令:
表 3-3
指 令
|
说 明
|
Assembly
|
把程序集链接到与它相关的页面或用户控件上
|
Control
|
用户控件(.ascx)使用的指令,其含义与Page指令相当
|
Implements
|
实现指定的.NET Framework接口
|
Import
|
在页面或用户控件中导入指定的命名空间
|
Master
|
允许指定master页面—— 在解析或编译页面时使用的特定属性和值。这个指令只能与master页面(.master)一起使用
|
MasterType
|
把类名与页面关联起来,获得包含在特定master页面中的强类型化的引用或成员
|
OutputCache
|
控制页面或用户控件的输出高速缓存策略
|
Page
|
允许指定在解析或编译页面时使用的页面特定属性和值。这个指令只能与ASP.NET页面(.aspx)一起使用
|
PreviousPageType
|
允许ASP.NET页面处理应用程序中另一个页面的回送信息
|
Reference
|
把页面或用户控件链接到当前的页面或用户控件上
|
Register
|
给命名空间和类名关联上别名,作为定制服务器控件语法中的记号
|
下面几节简要介绍这些指令。
3.3.1 @Page
@Page指令允许为ASP.NET页面(.aspx)指定解析和编译页面时使用的属性和值。这是最常用的指令。ASP.NET页面是ASP.NET的一个重要部分,所以它有许多属性。表3-4总结了@Page指令的可用属性。
表 3-4
属 性
|
说 明
|
AspCompat
|
若其值为True,就允许页面在单线程的单元中执行,这个属性的默认设置是False。
|
Async
|
指定ASP.NET页面是同步或异步处理
|
AutoEventWireUp
|
设置为True时,指定页面事件自动触发。这个属性的默认设置是True
|
Buffer
|
设置为True时,支持HTTP响应缓存。这个属性的默认设置是True
|
ClassName
|
指定编译页面时绑定到页面上的类名
|
CodeFile
|
引用与页面相关的后台编码文件
|
CodePage
|
指定响应的代码页面值
|
CompilerOptions
|
编译器字符串,指定页面的编译选项
|
CompileWith
|
包含一个String值,指向所使用的后台编码文件
|
ContentType
|
把响应的HTTP内容类型定义为标准MIME类型
|
Culture
|
指定页面的文化设置。ASP.NET 2.0允许把Culture 属性的值设置为Auto ,支持自动检测需要的文化
|
Debug
|
设置为True时,用调试符号编译页面
|
Description
|
提供页面的文本描述。ASP.NET解析器忽略这个属性及其值
|
EnableSessionState
|
设置为True时,支持页面的会话状态,其默认设置是True
|
EnableTheming
|
设置为True时,页面可以使用主题。其默认设置是False.
|
EnableViewState
|
设置为True时,在页面中维护视图状态,其默认设置是True
|
EnableViewStateMac
|
设置为True时,当用户回送页面时,页面会在视图状态上进行机器范围内的身份验证,其默认设置是False
|
ErrorPage
|
为所有未处理的页面异常指定用于发送信息的URL
|
Explicit
|
设置为True时,支持Visual Basic的Explicit选项。其默认设置是False
|
Language
|
定义内置显示和脚本块所使用的语言
|
LCID
|
为Web Form的页面定义本地标识符
|
LinePragmas
|
Boolean值,指定得到的程序集是否使用行附注
|
MasterPageFile
|
带一个 String 值,指向页面所使用的master页面的地址。这个属性在内容页面中使用
|
MaintainScrollPositionOn
Postback |
带一个Boolean 值,表示在回送页面时,页面是位于相同的滚动位置上,还是在最高的位置上重新生成页面
|
PersonalizationProvider
|
带一个 String 值,指定把个性化信息应用于页面时所使用的个性化提供程序名
|
ResponseEncoding
|
指定页面内容的响应编码
|
(续表)
属 性
|
说 明
|
SmartNavigation
|
指定是否为功能更丰富的浏览器激活ASP.NET智能导航功能。它把回送信息返回到页面的当前位置,其默认值是False
|
Src
|
指向类的源文件,用于所显示的页面的后台编码
|
Strict
|
设置为True时,使用Visual Basic Strict模式编译页面,其默认值是False
|
Theme
|
使用ASP.NET 2.0的主题功能,把指定的主题应用于页面
|
Title
|
应用页面的标题。这个属性主要用于必须应用页面标题的内容页面,而不是应用master页面中指定内容的页面
|
Trace
|
设置为True时,激活页面跟踪,其默认值是False
|
TraceMode
|
指定激活跟踪功能时如何显示跟踪消息。这个属性的设置可以是SortByTime 或SortByCategory,默认设置是SortByTime
|
Transaction
|
指定页面上是否支持事务处理。这个属性的设置可以是NotSupported、Supported、Required和RequiresNew,默认设置是NotSupported
|
UICulture
|
UICulture 属性的值指定ASP.NET 页面使用什么UI Culture。 ASP.NET 2.0允许给UICulture属性使用Auto值,支持自动检测UICulture
|
ValidateRequest
|
设置为True时,根据一组潜在危险的值检查窗体输入值,帮助防止Web应用程序受到有害的攻击,例如JavaScript攻击。默认值是True
|
WarningLevel
|
指定停止编译页面时的编译警告级别,其值可以是0到4
|
下面是使用@Page指令的一个示例:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb"
Inherits="_Default" %>
3.3.2 @Master
@Master指令非常类似于@Page指令,但@Master指令用于master页面(.master)。在使用@Master指令时,要指定和站点上的内容页面一起使用的模板页面的属性。内容页面(使用@Page指令建立)可以继承master页面上的所有master内容(在master页面上使用@Master指令定义的内容)。尽管这两个指令是类似的,但@Master指令的属性比@Page指令少。@Master指令的可用属性如表3-5所示。
表 3-5
属 性
|
说 明
|
AutoEventWireUp
|
设置为True时,指定master页面的事件是否自动触发。默认设置为True
|
ClassName
|
指定编译页面时绑定到master页面上的类名
|
CodeFile
|
引用与页面相关的后台编码文件
|
(续表)
属 性
|
说 明
|
CompilerOptions
|
编译字符串,表示master页面的编译选项
|
CompileWith
|
带一个String值,指向用于master页面的后台编码文件
|
Debug
|
设置为True时,用调试符号编译master页面
|
Description
|
提供master页面的文本描述。ASP.NET 解析器会忽略这个属性及其值
|
EnableTheming
|
设置为True时,表示master页面可以使用主题功能。其默认设置是False
|
EnableViewState
|
设置为True时,维护master页面的视图状态。其默认设置是True
|
Explicit
|
设置为True时,表示激活Visual Basic Explicit 选项。其默认设置是False
|
Inherits
|
指定master页面要继承的CodeBehind类
|
Language
|
定义内置显示和脚本块使用的语言
|
LinePragmas
|
Boolean值,指定得到的程序集是否使用行附注
|
MasterPageFile
|
带一个String值,指向master 页面所使用的master页面的地址。master页面可以使用另一个master页面,创建嵌套的master页面
|
Src
|
指向类的源文件,用于要显示的master页面的后台编码
|
Strict
|
设置为True时,使用Visual Basic Strict模式编译master页面。其默认设置是False
|
WarningLevel
|
指定停止编译页面时的编译警告级别,其值可以是0到4
|
下面是使用@Master指令的一个例子:
<%@ Master Language="VB" CodeFile="MasterPage1.master.vb"
AutoEventWireup="false" Inherits="MasterPage" %>
3.3.3 @Control
@Control指令类似于@Page指令,但@Control指令是在建立ASP.NET用户控件时使用的。@Control指令允许定义用户控件要继承的属性。这些属性值会在解析和编译页面时赋予用户控件。@Control指令的可用属性比@Page指令少,但其中有许多都可以在建立用户控件时进行需要的修改。表3-6详细介绍了这些可用属性。
表 3-6
属 性
|
说 明
|
AutoEventWireUp
|
设置为True时,指定用户控件的事件是否自动触发。默认设置为True
|
ClassName
|
指定编译页面时绑定到用户控件上的类名
|
CodeFile
|
引用与用户控件相关的后台编码文件
|
CompilerOptions
|
编译字符串,表示用户控件的编译选项
|
CompileWith
|
带一个String值,指向用于用户控件的后台编码文件
|
Debug
|
设置为True时,用调试符号编译用户控件
|
(续表)
属 性
|
说 明
|
Description
|
提供用户控件的文本描述。ASP.NET 解析器会忽略这个属性及其值
|
EnableTheming
|
设置为True时,表示用户控件可以使用主题功能。其默认设置是False
|
EnableViewState
|
设置为True时,维护用户控件的视图状态。其默认设置是True
|
Explicit
|
设置为True时,表示激活Visual Basic Explicit 选项。其默认设置是False
|
Inherits
|
指定用户控件要继承的CodeBehind类
|
Language
|
定义内置显示和脚本块使用的语言
|
LinePragmas
|
Boolean值,指定得到的程序集是否使用行附注
|
Src
|
指向类的源文件,用于要显示的用户控件的后台编码
|
Strict
|
设置为True时,使用Visual Basic Strict模式编译用户控件。其默认设置是False
|
WarningLevel
|
指定停止编译页面时的编译警告级别,其值可以是0到4
|
@Control指令用于ASP.NET用户控件。下面是使用该指令的一个例子:
<%@ Control Language="VB" Explicit="True"
CodeFile="WebUserControl.ascx.vb" Inherits="WebUserControl"
Description="This is the registration user control." %>
3.3.4 @Import
@Import指令允许指定要导入到ASP.NET页面或用户控件中的命名空间。导入了命名空间后,该命名空间中的所有类和接口就可以在页面和用户控件中使用了。这个指令只支持一个属性Namespace。
Namespace属性带一个String值,它指定要导入的命名空间。@Import指令不能包含多个属性/值对。所以,必须把多个命名空间导入指令放在多行代码上,如下所示:
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
应用程序已经引用了几个程序集,查看C:/Windows/Microsoft.NET/Framework/v2.0 xxxxx /CONFIG中的web.config.comments文件,就可以找到这些已导入命名空间的列表。这个程序集列表从<compilation>元素的<assemblies>子元素中引用。Web.config.comments文件中的设置如下所示:
<assemblies>
<add assembly="mscorlib" />
<add assembly="System, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089" />
<add assembly="System.Web, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
<add assembly="System.Data, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089" />
<add assembly="System.Web.Services, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
<add assembly="System.Xml, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089" />
<add assembly="System.Drawing, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
<add assembly="System.EnterpriseServices, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
<add assembly="System.Web.Mobile, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
<add assembly="*" />
</assemblies>
web.config.comments文件中有这个引用,所以这些程序集不需要像ASP.NET 1.0/1.1那样在References文件夹中引用。可以添加或删除在这个列表中引用的程序集。例如,如果服务器上的每个应用程序都引用了一个定制程序集,就可以在其他程序集的下面添加对定制程序集的类似引用。注意还可以通过应用程序的web.config文件完成这个任务。
尽管程序集已引用,仍必须在页面中导入这些程序集的命名空间。web.config.comments文件包含自动导入到应用程序的页面中的命名空间列表,这是通过<pages>元素的<namespaces>子元素指定的:
<namespaces>
<add namespace="System" />
<add namespace="System.Collections" />
<add namespace="System.Collections.Specialized" />
<add namespace="System.Configuration" />
<add namespace="System.Text" />
<add namespace="System.Text.RegularExpressions" />
<add namespace="System.Web" />
<add namespace="System.Web.Caching" />
<add namespace="System.Web.SessionState" />
<add namespace="System.Web.Security" />
<add namespace="System.Web.Profile" />
<add namespace="System.Web.UI" />
<add namespace="System.Web.UI.Imaging" />
<add namespace="System.Web.UI.WebControls" />
<add namespace="System.Web.UI.WebControls.WebParts" />
<add namespace="System.Web.UI.HtmlControls" />
</namespaces>
从这个XML列表中可以看出,每个ASP.NET页面都导入了许多命名空间。可以在web.config.comments文件中自由修改这个列表,甚至可以在应用程序的web.config文件中包含类似的命名空间列表。
把命名空间导入到ASP.NET页面或用户控件,使用类时就不必完全限定类名。例如,在ASP.NET页面中导入System.Data.OleDB命名空间,就可以使用单个类名来引用这个命名空间中的类(即使用OLEDBConnection,而不是System.Data.OleDB.OLEDBConnection)。
3.3.5 @Implements
@Implements指令允许ASP.NET页面实现特定的.NET Framework接口。这个指令只支持一个Interface属性。
Interface属性直接指定了.NET Framework接口。ASP.NET页面或用户控件实现一个接口时,就可以直接访问其中的所有事件、方法和属性。
下面是@Implements指令的一个例子:
<%@ Implements Inter %>
3.3.6 @Register
@Register指令把别名与命名空间和类名关联起来,作为定制服务器控件语法中的记号。把一个用户控件拖放到.aspx页面上时,就使用了@Register指令。把用户控件拖放到.aspx页面上,Visual Studio 2005就会在页面的顶部创建一个@Register指令。这样就在页面上注册了用户控件,该控件就可以通过特定的名称在.aspx页面上访问了。
@Register指令支持5个属性,如表3-7所示。
表 3-7
属 性
|
说 明
|
Assembly
|
与TagPrefix关联的程序集
|
Namespace
|
与TagPrefix关联的命名空间
|
Src
|
用户控件的位置
|
TagName
|
与类名关联的别名
|
TagPrefix
|
与命名空间关联的别名
|
下面是使用@Register指令把用户控件导入ASP.NET页面的一个例子:
<%@ Register TagPrefix="MyTag" Namespace="MyName:MyNamespace"
Assembly="MyAssembly" %>
3.3.7 @Assembly
@Assembly指令在编译时把程序集(.NET应用程序的构建块)关联到ASP.NET页面或用户控件上,使该程序集中的所有类和接口都可用于页面。这个指令支持两个属性Name和Src。
● Name:允许指定用于关联页面文件的程序集名称。程序集名称应只包含文件名,不包含文件的扩展名。例如,如果文件是MyAssembly.vb,Name属性值应是MyAssembly。
● Src:允许指定编译时使用的程序集文件源。
下面是使用@Assembly指令的一些例子:
<%@ Assembly Name="MyAssembly" %>
<%@ Assembly Src="MyAssembly.vb" %>
3.3.8 @PreviousPageType
这个指令用于指定跨页面的传送过程起始于哪个页面。在ASP.NET页面之间的跨页面传送过程详见后面的“跨页面传送”一节和第19章。
@PreviousPageType指令是一个新指令,用于处理ASP.NET 2.0提供的跨页面传送新功能。这个简单的指令只包含两个属性TypeName和VirtualPath:
● TypeName:设置回送时的派生类名。
● VirtualPath:设置回送时所传送页面的地址。
3.3.9 @MasterType
@MasterType指令把一个类名关联到ASP.NET页面上,以获得特定master页面中包含的强类型化引用或成员。这个指令支持两个属性:
● TypeName:设置从中获得强类型化的引用或成员的派生类名。
● VirtualPath:设置从中检索这些强类型化的引用或成员的页面地址。
使用@MasterType指令的细节请参阅第8章。下面是它的一个例子:
<%@ MasterType VirtualPath="~/Wrox.master" %>
3.3.10 @OutputCache
@OutputCache指令控制ASP.NET页面或用户控件的输出高速缓存策略。这个指令支持10个属性,如表3-8所示。
表 3-8
属 性
|
说 明
|
CacheProfile
|
允许使用集中式方法管理应用程序的高速缓存配置。使用CacheProfile属性可指定在web.config文件中详细说明的高速缓存配置名
|
DiskCacheable
|
指定高速缓存是否能存储在磁盘上
|
Duration
|
ASP.NET 页面或用户控件高速缓存的持续时间,单位是秒
|
Location
|
位置枚举值,默认为Any。它只对.aspx页面有效,不能用于用户控件(.ascx)。其他值有Client、Downstream、None、Server和ServerAndClient
|
NoStore
|
指定是否随页面发送没有存储的标题
|
SqlDependency
|
支持页面使用SQL Server高速缓存失效功能,这是ASP.NET 2.0的一个新功能
|
VaryByControl
|
用分号分隔开的字符串列表,用于改变用户控件的输出高速缓存
|
VaryByCustom
|
一个字符串,指定定制的输出高速缓存需求
|
VaryByHeader
|
用分号分隔开的HTTP标题列表,用于改变输出高速缓存
|
VaryByParam
|
用分号分隔开的字符串列表,用于改变输出高速缓存
|
下面是使用@OutputCache指令的一个例子:
<%@ OutputCache Duration="180" VaryByParam="None" %>
Duration属性指定这个页面存储在系统高速缓存中的时间(秒)。
3.3.11 @Reference
@Reference指令声明,另一个ASP.NET页面或用户控件应与当前活动的页面或控件一起编译。这个指令支持两个属性:
● TypeName:设置从中引用活动页面的派生类名。
● VirtualPath:设置从中引用活动页面的页面或用户控件地址。
下面是使用@Reference指令的一个例子:
<%@ Reference VirtualPath="~/MyControl.ascx" %>