5.2 ASP.NET页面指令
知识点讲解:光盘:视频\PPT讲解(知识点)\第5章\ASP.NET页面指令.mp4
ASP.NET的页面指令是一种命令,指示页面去执行某个任务。ASP.NET指令在每个ASP.NET页面中都有,使用这些指令可以控制ASP.NET页面的行为。例如,下面是Page指令的一个例子。
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.cs"
Inherits="_Default"
%>
在ASP.NET页面或用户控件中共有11个指令,无论页面是使用后台编码模型还是内置编码模型,都可以在应用程序中使用这些指令。基本上,这些指令都是编译器编译页面时使用的,把指令合并到页面中的操作十分简单,语法格式如下。
<%@ [Directive] [Attribute=Value] %>
在上面的代码行中,指令“以<%”@开头,以“%>”结束。建议把这些指令放在页面或控件的顶部,因为开发人员传统上都把指令放在此处(但如果指令位于其他地方,页面也仍能编译)。当然,也可以把多个属性添加到指令语句中,如下所示。
<%@ [Directive] [Attribute=Value] [Attribute=Value] %>
ASP.NET中的常用指令如表5-1所示。
表5-1 ASP.NET的常用指令信息
指 令 |
说 明 |
---|---|
Assembly |
把程序集链接到与它相关的页面或用户控件上 |
Control |
用户控件(.ascx)使用的指令,其含义与Page指令相当 |
Implements |
实现指定的.NET Framework接口 |
Import |
在页面或用户控件中导入指定的命名空间 |
Master |
允许指定一个Master页面——在解析或编译页面时使用的特定属性和值。这个指令只能与Master页面(.master)一起使用 |
MasterType |
把类名与页面关联起来,获得包含在特定Master页面中的强类型化的引用或成员 |
OutputCache |
控制页面或用户控件的输出高速缓存策略 |
Page |
允许指定在解析或编译页面时使用的页面特定属性和值。这个指令只能与ASP.NET页面(.aspx)一起使用 |
PreviousPageType |
允许ASP.NET页面处理应用程序中另一个页面的回送信息 |
Reference |
把页面或用户控件链接到当前的页面或用户控件上 |
Register |
给命名空间和类名关联上别名,作为定制服务器控件语法中的记号 |
在下面的内容中,将对上述常用的ASP.NET指令的用法及属性进行详细介绍。
5.2.1 Page指令
Page指令用于定义页面中的某个属性,ASP.NET的页面分析器和编译器可以根据此属性来解析或编译页面。Page指令只能被包含在.aspx文件中,并且一个页面只允许出现一条Page指令。Page指令的常用属性信息如表5-2所示。
表5-2 Page指令属性信息
属 性 |
说 明 |
---|---|
AspCompat |
当该属性设置为True时,允许在单线程单元(STA)线程上执行页。这允许页调用STA组件,例如,用Microsoft Visual Basic 6.0开发的组件。将该属性设为True还允许页调用COM+ 1.0版组件,该组件要求可以访问非托管Active Server Pages (ASP)内置对象可以通过ObjectContext对象或OnStartPage方法访问它们。默认值为False。注意:将该属性设置为true可能导致页的性能降低 |
Async |
指定ASP.NET页面是同步还是异步处理 |
AutoEventWireUp |
该属性设置为True时,指定页面事件自动触发,其默认设置是True |
Buffer |
该属性设置为True时,支持HTTP响应缓存,其默认设置是True |
ClassName |
指定编译页面时绑定到页面上的类名 |
CodeFile |
引用与页面相关的后台编码文件 |
CodePage |
指定响应的代码页面值 |
CodeBehind |
指定包含与页关联的类的已编译文件的名称。该属性不能在运行时使用。提供此属性是为了与以前版本的ASP.NET兼容,以实现代码隐藏功能。在ASP.NET 2.0版中,应改用CodeFile属性指定该源文件的名称,同时使用Inherits属性指定该类的完全限定名称 |
CodeFileBaseClass |
指定页的基类及其关联的代码隐藏类的路径。此属性是可选的,但如果使用此属性,则必须同时使用CodeFile属性。如果希望实现以下共享方案,可使用该属性:在该共享方案中,在基类中定义通用字段(可以选择性地定义关联事件)以引用在网页中声明的控件。出于ASP.NET代码生成模型的缘故,如果在基类中定义字段时没有使用该属性,则编译时将为在网页中(在单独的分部类存根中)声明的控件生成新的成员定义,而希望的方案将无法生效。但是,如果使用CodeFileBaseClass属性将基类与页相关联,并且分部类(其名称分配给Inherits属性,并且其源文件由CodeFile属性引用)是从该基类继承的,则该基类中的字段在代码生成之后将能够引用页上的控件 |
CompilerOptions |
编译器字符串,指定页面的编译选项 |
CompileWith |
包含一个String值,指向所使用的后台编码文件 |
ContentType |
把响应的HTTP内容类型定义为标准MIME类型 |
Culture |
指定页面的文化设置。ASP.NET 2.0允许把Culture 属性的值设置为Auto,支持自动检测需要的文化。注意:LCID和Culture属性是互相排斥的,如果使用了其中一个属性,就不能在同一页中使用另一个属性 |
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 |
值指定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.cs"
Inherits="_Default"
%>
5.2.2 @Master指令
@Master指令类似于@Page指令,但@Master指令只用于Master页面(.master)。在使用@Master指令时,要指定和站点上的内容页面一起使用的模板页面的属性。内容页面(使用@Page指令建立)可以继承Master页面上的所有Master内容(在Master页面上使用@Master指令定义的内容)。尽管这两个指令是类似的,但@Master指令的属性比@Page指令少。
@Master指令的常用属性信息如表5-3所示。
表5-3 @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.cs"
AutoEventWireup="false" Inherits="MasterPage"
%>
5.2.3 @Control指令
@Control指令也类似于@Page指令,但@Control指令是在建立ASP.NET用户控件时使用的。@Control指令允许定义用户控件要继承的属性,这些属性值会在解析和编译页面时赋予用户控件。@Control指令的可用属性比@Page指令少,但其中有许多都可以在建立用户控件时根据需要进行修改。
@Control指令常用属性的具体信息如表5-4所示。
表5-4 @Control指令属性信息
属 性 |
说 明 |
---|---|
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指令的一个例子。
<%@ Control Language="VB" Explicit="True"
CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl"
Description="使用例子"
%>
5.2.4 @Import指令
@Import指令允许指定要导入到ASP.NET页面或用户控件中的命名空间。当导入了命名空间后,该命名空间中的所有类和接口就可以在页面和用户控件中使用了。@Import指令的重要属性之一是Namespace,此属性带有一个String值,它指定要导入的命名空间。@Import指令不能包含多个属性/值对。所以,必须把多个命名空间导入指令放在多行代码上,例如下面的代码。
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
如果应用程序已经引用了几个程序集,查看“C:\WINDOWS\Microsoft.NET\Framework\ v4.0.30319\Config”中的web.config.comments文件,就可以找到这些已导入命名空间的列表。这个程序集列表从<compilation>元素的<assemblies>子元素中引用。Web.config.comments文件中的具体设置如下。
<assemblies>
<clear />
<add assembly="mscorlib" />
<add assembly="Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<add assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<add assembly="System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<add assembly="System.Web, Version=4.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)。
5.2.5 @Implements指令
@Implements指令允许ASP.NET页面实现特定的.NET Framework接口。Control指令只有一个属性,即Interface属性。Interface属性直接指定了.NET Framework接口。当ASP.NET页面或用户控件实现一个接口时,就可以直接访问其中的所有事件、方法和属性。
下面是使用@Implements指令的一行代码。
<%@ Implements Inter %>
5.2.6 @Assembly指令
@Assembly指令在编译时把程序集(.NET应用程序的构建块)关联到ASP.NET页面或用户控件上,使该程序集中的所有类和接口都可用于页面。@Assembly指令有如下2个属性。
(1)Name:允许指定用于关联页面文件的程序集名称。程序集名称应只包含文件名,不包含文件的扩展名和路径。例如,如果文件是MyAssembly.vb,Name属性值应是MyAssembly。
(2)Src:允许指定编译时使用的程序集文件源。
Name和Src是互斥的属性,不能在同一个@Assembly指令中同时使用。
下面是使用@Assembly指令的例子。
<%@ Assembly Name="MyAssembly" %>
<%@ Assembly Src="MyAssembly.cs" %>
为了方便用户的操作,ASP.NET在编译页面时会自动将默认的几个程序集的链接信息加入其中。这些默认的程序集信息如下。
- Mscorlib.dll:提供.NET Framework的核心功能,包括类型、AppDomains和运行库服务。
- System.dll:提供另一类服务,包括常规表达式、编译、本机方法、文件I/O和联网。
- System.Data.dll:指定数据容器和数据访问类,包括整个ADO.NET框架。
- System.Drawing.dll:实现GDI+功能。
- System.EnterpriseServices.dll:提供允许服务组件和COM+交互的类。
- System.Web.dll:此程序集实现核心ASP.NET服务、控件和类。
- System.Web.Mobile.dll:此程序集实现核心ASP.NET移动服务、控件和类。如果安装的是1.0版的.NET Framework,则不包括此程序集。
- System.Web.Services.dll:包括运行Web服务的核心代码。
- System.Xml.dll:实现.NET Framework XML功能。
通过编辑文件machine.config中的机器配置信息,可以修改、扩充或限制默认程序集列表,也可以修改在Web服务器上运行的所有ASP.NET应用程序;通过编辑应用程序的web.config文件,可以修改以应用程序为基础的程序集列表。
如果要防止将Bin目录中的所有程序集都链接到页面,可删除machine.config文件中的如下代码行。
<add assembly="*" />
如果要将需要的程序集链接到页面,则可以添加如下语句。
<%@ Assembly Name="AssemblyName" %>
或
<%@ Assembly Src="Assembly_code.cs" %>
Name和Src是互斥的属性,不能在同一个@Assembly指令中使用。
@Assembly可以在页面中多次出现,但对于每一个要链接的程序集只需要一个@Assembly指令。
5.2.7 @PreviousPageType指令
@PreviousPageType指令的功能是指定跨页面的传送过程起始于哪个页面。此指令是一个新指令,用于处理ASP.NET 2.0提供的跨页面传送新功能。@PreviousPageType指令只包含如下两个属性。
- TypeName:设置回送时的派生类名。
- VirtualPath:设置回送时所传送页面的地址。
5.2.8 @MasterType指令
@MasterType指令能够把一个类名关联到ASP.NET页面上,以获得特定Master页面中包含的强类型化引用或成员。这个指令支持如下2个属性。
- TypeName:设置从中获得强类型化的引用或成员的派生类名。
- VirtualPath:设置从中检索这些强类型化的引用或成员的页面地址。
下面是使用@MasterType指令的一个例子。
<%@ MasterType VirtualPath="~/Wrox.master" %>
5.2.9 @OutputCache指令
@OutputCache指令的功能是控制ASP.NET页面或用户控件的输出高速缓存策略。@OutputCache指令常用属性的具体信息如表5-5所示。
下面是使用@OutputCache指令的一行代码。
<%@ OutputCache Duration="180" VaryByParam="None" %>
其中,Duration属性用于指定当前页面存储在系统高速缓存中的时间(单位是秒)。
表5-5 @OutputCache指令属性信息
属 性 |
说 明 |
---|---|
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 |
用分号分隔开的字符串列表,用于改变输出高速缓存 |
5.2.10 @Reference指令
@Reference指令的功能是将其他页面或用户控件或任何文件动态编译,并链接到当前页面。这样,用户就可以在当前文件内部引用这些对象和其公共成员。
@Reference指令支持如下2个属性。
- TypeName:设置从中引用活动页面的派生类名。
- VirtualPath:设置从中引用活动页面的页面或用户控件地址。
下面是使用@Reference指令的一行代码。
<%@ Reference VirtualPath="~/MyControl.ascx" %>
实例011 演示@Reference指令的使用方法
光盘\daima\5\1\ 视频路径 光盘\视频\实例\第5章\011
本实例的具体实现过程如下。
(1)创建一个新用户控件的.ascx文件,命名为“sample.ascx”。此文件的功能是设置用户控件被加载时,控件中的Label服务器控件将显示LabelText属性的值。文件sample.ascx的实现代码如下。
<% @ Control language="C#|" ClassName="MyControl” %>
<script runat="server">
private string _labelText; //用户控件属性
public string LabelText
{
get
{
return _labelText;
}
set
{
_labelText = value;
}
}
void lblSample_init(object sender, EventArgs e) //初始化代码
{
lblSample.Text = LabelText;
}
</script>
<asp:label id="lblSample" runat="server" Text="" oninit="lblSample_init" />
范例021:在弹出的广告窗口中添加【关闭】按钮
源码路径:光盘\演练范例\021视频路径:光盘\演练范例\021范例022:使用JavaScript刷新广告窗口的父窗口
源码路径:光盘\演练范例\022视频路径:光盘\演练范例\022\
(2)创建页面文件,命名为“Sample.aspx”,其主要实现代码如下。
<%@ Page language="C#|" %>
<%@ Reference Control="sample.ascx" %>
<script runat="server">
void Page_Load(Object sender, EventArgs e)
{
//使用了@Reference指令,所以在此用户控件可以被加载
MyControl ctrl = (MyControl)Page.LoadControl("sample.ascx");
ctrl.LabelText = "@Reference指令演示"; //设置控件实例的LableText属性
Page.Controls.Add(ctrl); //将控件实例添加到页面
}
</script>
这样,页面文件就成功地调用了sample.ascx控件,并创建了一个sample实例。上述代码执行后将输出显示重新修改加载后的属性信息,如图5-5所示。
图5-5 执行效果
5.2.11 @Register指令
@Register指令把别名与命名空间和类名关联起来,作为定制服务器控件语法中的记号。把一个用户控件拖放到.aspx页面上时,Visual Studio 2005就会在页面的顶部创建一个@Register指令。这样就在页面上注册了用户控件,该控件就可以通过特定的名称在.aspx页面上访问了。
@Register指令常用属性的说明如表5-6所示。
表5-6 @Register指令属性信息
属 性 |
说 明 |
---|---|
Assembly |
与TagPrefix关联的程序集 |
Namespace |
与TagPrefix关联的命名空间 |
Src |
用户控件的位置 |
TagName |
与类名关联的别名 |
TagPrefix |
与命名空间关联的别名 |
实例012 通过用户控件输出对应属性信息
光盘 \daima\5\2\ 视频路径 光盘\视频\实例\第5章\012
本实例演示了@Registe指令的使用方法,通过设置调用与类关联的文件sample.ascx,在页面中通过用户控件输出对应属性信息。实现文件为Register.aspx,其主要实现代码如下。
<%@Page language="C#|" %>
<%@Register TagPrefix="uc1"
TagName="MyControlSample"
Src="sample.ascx"
%>
……
<body>
<uc1:MyControlSample
LabelText="@Register指令演示"
runat="server"/>
</body>
范例023:模仿Office的下拉式菜单导航栏
源码路径:光盘\演练范例\023视频路径:光盘\演练范例\023范例024:动态显示提示信息的解释菜单
源码路径:光盘\演练范例\024视频路径:光盘\演练范例\024\
这样,实例文件也将成功地调用sample.ascx控件,并在页面中声明sample.ascx控件实例MyControlSample。执行后将输出显示加载后的属性信息,如图5-6所示。
图5-6 执行效果
共有条评论 网友评论