ASP.NET 2.0的页面指令集(转)
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" %>