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] %>
下表描述了ASP.NET 2.0中的指令:
指 令 | 说 明 |
Assembly | 把程序集链接到与它相关的页面或用户控件上 |
Control | 用户控件(.ascx)使用的指令,其含义与Page指令相当 |
Implements | 实现指定的.NET Framework接口 |
Import | 在页面或用户控件中导入指定的命名空间 |
Master | 允许指定master页面—— 在解析或编译页面时使用的特定属性和值。这个指令只能与master页面(.master)一起使用 |
MasterType | 把类名与页面关联起来,获得包含在特定master页面中的强类型化的引用或成员 |
OutputCache | 控制页面或用户控件的输出高速缓存策略 |
Page | 允许指定在解析或编译页面时使用的页面特定属性和值。这个指令只能与ASP.NET页面(.aspx)一起使用 |
PreviousPageType | 允许ASP.NET页面处理应用程序中另一个页面的回送信息 |
Reference | 把页面或用户控件链接到当前的页面或用户控件上 |
Register | 给命名空间和类名关联上别名,作为定制服务器控件语法中的记号 |
下面几节简要介绍这些指令。
@Page
@Page指令允许为ASP.NET页面(.aspx)指定解析和编译页面时使用的属性和值。这是最常用的指令。ASP.NET页面是ASP.NET的一个重要部分,所以它有许多属性。下表总结了@Page指令的可用属性。
属 性 | 说 明 |
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 | 带一个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" %>
@Master
@Master 指令非常类似于@Page指令,但@Master指令用于master页面(.master)。在使用@Master指令时,要指定和站点上的内容页面一起使用的模板页面的属性。内容页面(使用@Page指令建立)可以继承master页面上的所有master内容(在master页面上使用 @Master指令定义的内容)。尽管这两个指令是类似的,但@Master指令的属性比@Page指令少。@Master指令的可用属性如表所示。
属 性 | 说 明 |
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" %>
@Control
@Control指令类似于@Page指令,但 @Control指令是在建立ASP.NET用户控件时使用的。@Control指令允许定义用户控件要继承的属性。这些属性值会在解析和编译页面时赋予用户控件。@Control指令的可用属性比@Page指令少,但其中有许多都可以在建立用户控件时进行需要的修改。下表详细介绍了这些可用属性。
属 性 | 说 明 |
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." %>
@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 Interface="System.Web.UI.IValidator" %>
@Register
@Register 指令把别名与命名空间和类名关联起来,作为定制服务器控件语法中的记号。把一个用户控件拖放到.aspx页面上时,就使用了@Register指令。把用户控件拖放到.aspx页面上,Visual Studio 2005就会在页面的顶部创建一个@Register指令。这样就在页面上注册了用户控件,该控件就可以通过特定的名称在.aspx页面上访问了。
@Register指令支持5个属性,如表所示。
属 性 | 说 明 |
Assembly | 与TagPrefix关联的程序集 |
Namespace | 与TagPrefix关联的命名空间 |
Src | 用户控件的位置 |
TagName | 与类名关联的别名 |
TagPrefix | 与命名空间关联的别名 |
下面是使用@Register指令把用户控件导入ASP.NET页面的一个例子:
<%@ Register TagPrefix="MyTag" Namespace="MyName:MyNamespace"
Assembly="MyAssembly" %>
@Assembly
@Assembly指令在编译时把程序集(.NET应用程序的构建块)关联到ASP.NET页面或用户控件上,使该程序集中的所有类和接口都可用于页面。这个指令支持两个属性Name和Src。
● Name:允许指定用于关联页面文件的程序集名称。程序集名称应只包含文件名,不包含文件的扩展名。例如,如果文件是MyAssembly.vb,Name属性值应是MyAssembly。
● Src:允许指定编译时使用的程序集文件源。
下面是使用@Assembly指令的一些例子:
<%@ Assembly Name="MyAssembly" %>
<%@ Assembly Src="MyAssembly.vb" %>
@PreviousPageType
这个指令用于指定跨页面的传送过程起始于哪个页面。在ASP.NET页面之间的跨页面传送过程详见后面的“跨页面传送”一节和第19章。
@PreviousPageType指令是一个新指令,用于处理ASP.NET 2.0提供的跨页面传送新功能。这个简单的指令只包含两个属性TypeName和VirtualPath:
● TypeName:设置回送时的派生类名。
● VirtualPath:设置回送时所传送页面的地址。
@MasterType
@MasterType指令把一个类名关联到ASP.NET页面上,以获得特定master页面中包含的强类型化引用或成员。这个指令支持两个属性:
● TypeName:设置从中获得强类型化的引用或成员的派生类名。
● VirtualPath:设置从中检索这些强类型化的引用或成员的页面地址。
使用@MasterType指令的细节请参阅第8章。下面是它的一个例子:
<%@ MasterType VirtualPath="~/Wrox.master" %>
@OutputCache
@OutputCache指令控制ASP.NET页面或用户控件的输出高速缓存策略。这个指令支持10个属性,如表所示
属 性 | 说 明 |
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属性指定这个页面存储在系统高速缓存中的时间(秒)。
@Reference
@Reference指令声明,另一个ASP.NET页面或用户控件应与当前活动的页面或控件一起编译。这个指令支持两个属性:
● TypeName:设置从中引用活动页面的派生类名。
● VirtualPath:设置从中引用活动页面的页面或用户控件地址。
下面是使用@Reference指令的一个例子:
<%@ Reference VirtualPath="~/MyControl.ascx" %>