清华电脑学堂:ASP.NET 4.5网站开发与应用实践教程
上QQ阅读APP看书,第一时间看更新

2.3 ASP.NET的页面指令

ASP.NET页面中通常包含一些类似<%@ %>的代码,被称为页面指令。这些指令允许指定一些属性和配置信息,就是ASP.NET用作处理页面的指令。当使用指令时,标准的做法是将指令包括在文件的开头,也可以将它们置于“.aspx”或“.ascx”文件中的任何位置。本节介绍ASP.NET中提供的一些基本指令,每个指令都可以包含一个或者多个特定于该指令的属性。

2.3.1 @Page指令

指令用以控制页面生成,它通常有两个作用:指定页面在处理Web窗体页文件(扩展名为“.aspx”的文件)时使用哪些设置;指定用户控件编译器在处理用户自定义控件(扩展名为“.ascx”)时使用哪些设置。

@Page指令定义ASP.NET页解析器和编译器所使用的特定的页面属性。@Page指令只能在“.aspx”页面中使用,如果在其他ASP.NET页(如控件和Web服务)中使用会导致编译错误。每一个“.aspx”文件最多只能包含一个@Page指令,基本语法如下。

        <%@ Page attribute="value" [attribute="value"…]%>

@Page指令大约有三十个属性,它们从逻辑上分为三类:编译、页面整体行为和页面输出。如表2-1所示只对@Page指令的常用属性进行说明。

表2-1 @Page指令的常用属性

2.3.2 @Control指令

@Control指令类似于@Page指令,但是它定义ASP.NET页解析器和编译器所使用的特定的用户控件的属性。@Control指令只能用在用户控件中,每一个“.ascx”文件最多只能包含一条@Control指令。基本语法如下。

        <%@ Control attribute="value" [attribute="value"…]%>

@Control指令的可用属性要比@Page指令少,但是其中许多属性都可以在创建用户控件时根据需要进行修改。创建用户控件时会自动添加@Control指令,代码如下。

        <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="
        WebUserControl1.ascx.cs" Inherits="WorkTest.WebUserControl1" %>

2.3.3 @Register指令

@Register指令用于注册页面中的用户控件和自定义服务器控件以使用它们。把一个用户控件拖放到“.aspx”页面上时,就会使用到@Register指令;把一个第三方控件拖放到“.aspx”页面上时,也会使用到@Register指令。这样,在页面上注册用户控件或第三方控件之后就可以在“.aspx”页面上访问该控件了。

@Register指令支持5个属性,如表2-2所示。

表2-2 @Register指令的常用属性

2.3.4 @Master指令

@Master指令用于指示当前页面标识为ASP.NET母版页。简单来说,@Master指令用于创建母版页。在使用@Master指令时,要指定和站点上的内容页面一起使用的模板页面的属性,内容页面(使用@Page指令创建)可以继承母版页上的所有内容。

@Master指令与@Page指令类似,但是它的属性要比@Page指令的属性少。创建一个母版页时生成的@Master指令的代码如下。

        <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.
        cs" Inherits="WorkTest.SiteMaster" %>

2.3.5 @MasterType指令

@MasterType指令把一个类名关联到ASP.NET页面上,以获取特定母版页中包含的强类型化的引用或成员。@MasterType指令支持TypeName和VirtualPath两个属性。

(1)TypeName属性:设置从中获取强类型化的引用或成员的派生类的名称。

(2)VirtualPath属性:设置从中检索这些强类型化的引用或成员的页面地址。

如下代码简单演示了@MasterType指令的使用。

        <%@ MasterType VirtualPath="~/MyWork.master" %>

2.3.6 @Import指令

@Import指令在页面或用户控件中显式地引入一个命名空间,以便所有已定义类型可以在页面访问,而不必使用完全限定名。例如,创建ASP.NET中DataSet类的实例时,可以导入System.Data命名空间,也可以使用完全限定名。使用完全限定名的代码如下。

        System.Data.DataSet ds = new System.Data.DataSet();

@Import指令可以在页面主体中多次使用,它相当于C#中的using语句。如下为它的简单例子。

        <%@ Import Namespace="System.Data" %>

2.3.7 @Implements指令

@Implements指令允许在页面或用户控件中实现一个.NET Framework接口,该指令只支持Interface属性。Interface属性直接指定.NET Framework接口。当ASP.NET页面或用户控件实现接口时,可以直接访问其中所有的事件、方法和事件。

如下是使用@Implements指令的例子。

        <%@ Implements Interface="System.Web.UI.IValidator" %>

2.3.8 @Reference指令

@Reference指令用来识别当前页面在运行时应该动态编译和链接的页面或用户控件。该指令在跨页通信方面发挥着重大作用,可以通过它来创建用户控件的强类型实例。

@Reference指令可以多次出现在页面中,并且包含三个属性:Page、Control和VirtualPath。

(1)Page属性:该属性用于指向某个“.aspx”源文件。

(2)Control属性:该属性包含“.ascx”用户控件的路径。

(3)VirtualPath属性:设置从中引用活动页面的页面或用户控件的位置。

2.3.9 @Assembly指令

@Assembly指令将程序集引入到当前页面或用户控件中,以便它所包含的类和接口能够适用于页面中的代码。@Assembly指令支持Name和Src两个属性。

(1)Name属性:允许指定用于关联页面文件的程序集名称。程序集名称应只包含文件名,不包含文件的扩展名。假设文件是MyAssembly.vb,那么Name属性的值是MyAssembly。

(2)Src属性:允许指定编译时所使用的程序集文件源。

2.3.10 @OutputCache指令

@OutputCache指令对页面或用户控件在服务器上如何输出高速缓存进行控制。该指令常用属性如表2-3所示。

表2-3 @OutputCache指令的常用属性

2.3.11 @PreviousPageType指令

@PreviousPageType指令用于指定跨页面的传送过程起始于哪个页面。@PreviousPageType是一个新指令,用于处理ASP.NET提供的跨页面传送新功能。这个简单的指令只包含两个属性:TypeName和VirtualPath。

(1)TypeName属性:设置回送时的派生类的名称。

(2)VirtualPath属性:设置回送时所传送页面的地址。

注意

在前面介绍的指令中,除了@Page、@Control、@Master、@MasterType和@PreviousPageType外,所有指令都可以在页面和控件中声明。@Page和@Control是互斥的:@Page只能用在“.aspx”文件中;@Control只能用在“.ascx”文件中。