频道栏目
读书频道 > web开发 > .NET > ASP.NET开发宝典
3.1.3 页面指令种类与作用
2012-10-16 11:00:01     我来说两句
收藏   我要投稿

本文所属图书 > ASP.NET开发宝典

本书全面细致地讲解了使用ASP.NET进行编程和实际项目开发的各种技术,是学习ASP.NET编程的必备图书。全书以Visual Studio 2010开发环境为基础,分两大部分共34章讲解了ASP.NET编程中的各种技术。其中,第一部分...  立即去当当网订购

在ASP.net Web窗体中支持的指令如表3.2所示。

表3.2   ASP.NET页面指令

指  令 作  用
@Page  定义ASP.NET页分析器和编译器使用的页特定(.aspx文件)属性
@Import  将命名空间显示导入到页中,使所导入的命名空间的所有类和接口可用于该页。导入的命名空间可以是.NET Framework类库或用户自定义的命名空间的一部分

(续)

  指  令 作  用
@OutputCache  以声明的方式控制ASP.NET页或页中包含的用户控件的输出缓存策略
@Implements  指示当前或用户实现指定的.NET Framework接口
@Register  将别名与命名空间及类名关联起来,以便在自定义服务器控件语法中使用简明的表示法
@Assembly  在编译过程中将程序集链接到当前页,以使程序集的所有类和接口都可用在该页上
@Control  定义ASP.NET页分析器和编译器使用的用户控件(.ascx文件)特定的属性。该指令只能用于用户控件
@Master  标识ASP.NET母版页
@MasterType  为ASP.NET页的Master属性分配类名,使该页可以获取对母版页成员的强类型引用
@PreviousPageType  提供用于获得上一页的强类型的方法,可通过PreviousPage属性访问上一页
@Reference  以声明的方式指示,应该根据在其中声明此指令的页对另一个用户控件或页源文件进行动态编译和链接

下面详细介绍ASP.NET指令的作用。

1. @Page指令

@Page指令允许开发人员为页面指定多个配置选项,并且该指令只能在Web窗体页中使用。每个.aspx文件只能包含一条@Page指令。@Page指令可以指定:页面中代码的服务器编程语言;页面是将服务器代码直接包含在其中(即单文件页面),还是将代码包含在单独的类文件中(即代码隐藏页面);调试和跟踪选项;页面是否为某母版页的内容页。

语法:

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

attribute为@Page指令的属性。@Page指令语法中各属性的说明如表3.3所示。

表3.3   @Page指令属性说明

   属  性 描  述
AutoEventWireup  指示页的事件是否自动绑定。如果启用了事件自动绑定,则为true;否则为false。默认值为true
Buffer  确定是否启用了HTTP响应缓冲。如果启用了页缓冲,则为true;否则为false。默认值为true
ClassName  一个字符串,指定在请求页时将自动进行动态编译的页的类名。此值可以是任何有效的类名,并且可以包括类的完整命名空间(完全限定的类名)。如果未指定该属性的值,则已编译页的类名将基于页的文件名
CodeBehind  指定包含与页关联的类的已编译文件的名称。该属性不能在运行时使用
CodeFile  指定指向页引用的代码隐藏文件的路径
CodePage  指示用于响应的编码方案的值,该值是一个用做编码方案ID的整数
Description  提供该页的文本说明。ASP.NET分析器忽略该值
Inherits  定义供页继承的代码隐藏类。它与CodeFile属性(包含指向代码隐藏类的源文件的路径)一起使用
Language  指定在对页中的所有内联呈现(<% %>和<%= %>)和代码声明块进行编译时使用的语言。只可以表示任何.NET Framework支持的语言,如C#
MasterPageFile  设置内容页的母版页或嵌套母版页的路径。支持相对路径和绝对路径
Title  指定在响应的HTML<title>标记中呈现的页的标题。也可以通过编程方式将标题作为页的属性来访问

常用属性说明:

(1)AutoEventWireup属性

该属性指示页的事件是否自动绑定。

ASP.NET 4.0默认为true。ASP.NET页触发的事件,如Init、Load等,在默认情况下,可以使用“Page_事件名”的命名约定将页事件绑定到相应的方法。页面编辑时ASP.NET将查找基于此命名约定的方法,并自动执行。

【例3.2】 显示声明事件的处理程序,将AutoEventWireup属性设置为false。代码如下。

<%@ Page Language="C#" AutoEventWireup="false" %>

(2)CodeFile属性

该属性指定指向页引用的代码隐藏文件的路径。此属性与Inherits属性一起使用可以将代码隐藏源文件与网页相关联。此属性仅对编译的页有效。

例如:新添加一个.aspx页时,设置该页面代码隐藏文件的路径为“Default2.aspx.cs”。代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

注意:若要定义@Page指令的多个属性,请使用一个空格分隔每个属性/值对。对于特定属性,不要在该属性与其值相连的等号(=)两侧加空格。

(3)Language属性

该属性指定编译页面使用的语言。每页只能使用和指定一种语言。

【例3.3】 指定ASP.NET页编译器使用C#作为页的服务器端代码语言。代码如下。

<%@ Page Language="C#" %>

2. @Import指令

@Import指令用于将命名空间显式地导入ASP.NET应用程序文件中,并且导入该命名空间的所有类和接口。导入的命名空间可以是.NET Framework类库的一部分,也可以是用户定义的命名空间的一部分。

语法:

<%@ Import namespace="value" %>

其中,namespace属性用来指定要导入的命名空间的完全限定名。

@ Import指令不能有多个namespace属性。若要导入多个命名空间,需要使用多条@ Import指令来实现。在ASP.NET 4.0中命名空间是默认导入的,默认导入的空间如下:

可以将一组命名空间自动导入.aspx页中。导入的命名空间在计算机级别的Web.config文件中定义,具体位置为<pages>元素的<namespaces>节内。下面的命名空间将自动导入到所有的页中:

 System
 System.Collections
 System.Collections.Specialized
 System.Configuration
 System.Text
 System.Text.RegularExpressions
 System.Web
 System.Web.Caching
 System.Web.Profile
 System.Web.Security
 System.Web.SessionState
 System.Web.UI
 System.Web.UI.HtmlControls
 System.Web.UI.WebControls
 System.Web.UI.WebControls.WebParts

【例3.4】  导入.NET Framework基类命名空间System.Net和用户定义的命名空间Grocery。代码如下。

<%@ Import Namespace="System.Net" %><%@ Import Namespace="Grocery" %;

3. @OutputCache指令

@OutputCache指令用于以声明的方式控制ASP.NET页,或页中包含的用户控件的输出缓存策略。页输出缓存,就是在内存中存储处理后的ASP.NET页的内容。这一机制允许ASP.NET向客户端发送页响应,而不必再次经过页处理生命周期。

页输出缓存对于那些不经常更改,但需要大量处理才能创建的页特别有用。例如,如果创建大通信量的网页来显示不需要频繁更新的数据,页输出缓存则可以极大地提高该页的性能。可以分别为每个页配置页缓存,也可以在Web.config文件中创建缓存配置文件。利用缓存配置文件,只定义一次缓存设置就可以在多个页中使用这些设置。

页输出缓存的语法:

%@OutputCache attribute="value" [attribute="value"...]%

其中,attribute表示@OutputCache指令中的属性。@OutputCache指令的属性说明如表3.4所示。

表3.4   @OutputCache指令的属性说明

     属  性 描  述
Duration  页或用户控件进行缓存的时间(以秒计)。在页或用户控件上设置该属性为来自对象的HTTP响应建立了一个过期策略,并将自动缓存页或用户控件输出
Location  OutputCacheLocation枚举值之一。默认值为Any
CacheProfile  与该页关联的缓存设置的名称。这是可选属性,默认值为空字符串 ("")
CodeBehind  指定包含与页关联的类的已编译文件的名称。该属性不能在运行时使用
NoStore  一个布尔值,它决定了是否阻止敏感信息的二级存储
Shared  一个布尔值,确定用户控件输出是否可以由多个页共享。默认值为 false
SqlDependency  标识一组数据库/表名称对的字符串值,页或控件的输出缓存依赖于这些名称对
VaryByCustom  表示自定义输出缓存要求的任意文本
VaryByHeader  分号分隔的HTTP标头列表,用于使输出缓存发生变化
VaryByParam  分号分隔的字符串列表,用于使输出缓存发生变化
VaryByControl  一个分号分隔的字符串列表,用于更改用户控件的输出缓存
VaryByContentEncodings  以分号分隔的字符串列表,用于更改输出缓存

常用属性说明:

(1)Duration属性

该属性指定页或用户控件进行缓存的时间,以秒为单位。在页或用户控件上设置该属性为来自对象的HTTP响应建立了一个过期策略,并将自动缓存页或用户控件输出。

说明:Duration属性是必选属性。如果未包含该属性,将出现分析器错误。

【例3.5】 设置页或用户控件进行输出缓存的持续时间为100秒。代码如下:

<%@ OutputCache Duration="100" VaryByParam="none" %>

(2)VaryByParam属性

该属性为分号分隔的字符串列表,用于使输出缓存发生变化。默认情况下,这些字符串与随GET方法发送的查询字符串值对应,或与使用POST方法发送的参数对应。将该属性设置为多个参数时,对于每个指定参数组合,输出缓存都包含一个不同版本的请求文档。可能的值包括none、星号(*)以及任何有效的查询字符串或POST参数名称。

注意:在ASP.NET页和用户控件上使用@OutputCache指令时,需要包含VaryByParam属性或VaryByControl属性。如果没有包含VaryByParam属性或VaryByControl属性,则发生分析器错误。如果不希望通过指定参数来改变缓存内容,可将VaryByParam属性值设置为none。如果希望通过所有的参数值改变输出缓存,可将属性设置为星号(*)。

4. @Implements指令

@Implements指令用来定义要在页或用户控件中实现的接口。

语法:
<%@ Implements interface=" value " %>

其中,interface属性用来指定要在页或用户控件中实现的接口。

在Web窗体页中实现接口时,开发人员可以在代码声明块中的<script>元素的开始标记和结束标记之间创建其事件、方法和属性。但不能使用该指令在代码隐藏文件中实现接口。

5. @Register指令

@Register指令创建标记前缀和自定义控件之间的关联,这为开发人员提供了一种在ASP.NET应用程序文件(包括网页、用户控件和母版页)中引用自定义控件的简单方法。

语法:
//第一种
<%@ Register tagprefix="tagprefix" namespace="namespace" assembly="assembly" %>
//第二种
<%@ Register tagprefix="tagprefix" namespace="namespace" %>
//第三种
<%@ Register tagprefix="tagprefix" tagname="tagname" src="pathname" %>

@Register指令语法中各属性的说明如表3.5所示。

表3.5   @Register指令的属性说明

属  性 描  述
assembly  设置与tagprefix属性关联的命名空间所驻留的程序集。程序集名称不包括文件扩展名。如果将自定义控件的源代码文件放置在应用程序的App_Code文件夹下,ASP.NET会在运行时动态编译源文件,因此不必使用assembly属性

(续)

属  性 描  述
namespace  设置正在注册的自定义控件的命名空间
src  与tagprefix:tagname对关联的声明性用户控件文件的相对或绝对的位置
tagname  与类关联的任意别名。此属性只用于用户控件
tagprefix  提供对包含指令的文件中所使用的标记的命名空间的短引用

【例3.6】 使用@ Register指令声明tagprefix和tagname别名,同时分配src属性以在网页内引用用户控件。代码如下:

用户控件代码:

<%@ Control ClassName="CalendarUserControl" %>
<asp:calendar id="Calendar1" runat="server" />
.aspx页代码:
<%@ Page %>
<%@ register tagprefix="uc1" tagname="CalendarUserControl" src="~/CalendarUserControl.ascx" %>

tagprefix属性分配一个用于标记的任意前缀值“uc1”。tagname属性使用分配给用户控件的类名称的值“CalendarUserControl”(尽管此属性的值是任意的,并可使用任何字符串值,但是不必使用所引用的控件的类名称)。src属性指向用户控件的源文件“~/CalendarUserControl.ascx”(相对于应用程序根文件夹)。

所以,可以按照如下形式引用用户控件(即使用前缀、冒号以及标记名称)。代码如下:

<uc1:CalendarUserControl runat="server" />

6. @Assembly指令

@Assembly指令用于在编译时将程序集链接到页面,这使得开发人员可以使用程序集公开的所有类和方法等。

语法:

//第一种
<%@ Assembly Name="assemblyname" %>
//第二种
<%@ Assembly Src="pathname" %>
@Assembly指令语法中各属性的说明如表3.6所示。

表3.6   @Assembly指令的属性说明

属  性 描  述
Name 指定编译页面时要链接的程序集
Src 指定要动态编译并链接到当前页面的源文件的路径

必须在@Assembly指令中包含Name或Src属性,但不能在同一个指令中包含两者。如果需要同时使用这两个属性,则必须在文件中包含多个@Assembly指令。

在链接Web应用程序的Bin目录中的程序集时,将自动链接到该应用程序中的ASP.NET文件。这样的程序集不需要@Assembly指令。

【例3.7】 使用@ Assembly指令链接到用户定义的程序集MyAssembly。代码如下。

<%@ Assembly Name="MyAssembly"%>

【例3.8】 使用@ Assembly指令链接到Visual Basic 源文件MySource.vb。代码如下。

<%@ Assembly Name="MySource.vb"%>

7. @Control指令
@Control指令与@Page指令基本相似,在.aspx文件中包含了@Page指令,而在.ascx文件中则不包含@Page指令,该文件中包含@Control指令。该指令只能用于用户控件中。用户控件在带有.ascx扩展名的文件中进行定义。每个.ascx文件只能包含一条@Control指令。此外,对于每个 @Control指令,只允许定义一个Language属性,因为每个控件只能使用一种语言。

语法:

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

其中,attribute表示@Control指令中各属性,@Control指令属性的说明如表3.7所示。

表3.7   @Control指令属性说明

   属  性 描  述
AutoEventWireup  设置控件的事件是否自动匹配。如果启用事件自动匹配,则为true;否则为false。默认值为true
ClassName  用于指定需在请求时进行动态编译的控件的类名。此值可以是任何有效的类名,并且可以包括类的完整命名空间。如果没有为此属性指定值,已编译控件的类名将基于该控件的文件名
CodeBehind  设置包含与控件关联的类定义的文件名称。该属性不能在运行时使用。包含此属性是为了与ASP.NET早期版本兼容,以实现代码隐藏功能。在 ASP.NET中,应当改用CodeFile属性指定源文件的名称,并用Inherits属性指定类的完全限定名
CodeFile  设置所引用的控件代码隐藏文件的路径。此属性与Inherits属性一起使用,将代码隐藏源文件与用户控件相关联。该属性只对已编译控件有效
Description  提供控件的文本说明
Inherits  设置供控件继承的代码隐藏类。它可以是从UserControl类派生的任何类。与包含代码隐藏类源文件的路径的CodeFile属性一起使用
Language  设置在编译控件中所有内联呈现(<% %>和<%= %>)和代码声明块时使用的语言。只可以表示任何.NET Framework支持的语言,包括Visual Basic、C#或JScript。对于每个控件,只能使用和指定一种语言

【例3.9】 新添加一个.ascx页,在页面中@Control指令默认代码如下。
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="AdminPanel.ascx.cs"
 Inherits="Controls_AdminPanel" %>

8. @Master指令

@Master指令只能在母版页的.master文件中使用,用于标识ASP.NET母版页。每个.master文件只能包含一条@Master指令。

语法:

<%@ Master attribute="value" [attribute="value"...]%>

其中,attribute表示@Master指令中的各属性,@Master指令属性的说明如表3.8所示。

表3.8   @Master指令属性说明

   属  性 描  述
AutoEventWireup  设置控件的事件是否自动匹配。如果启用事件自动匹配,则为true;否则为false。默认值为true
ClassName  设置自动从标记生成并在处理母版页时自动进行编译的类的类名
CodeFile  设置包含分部类的单独文件的名称,该分部类具有事件处理程序和特定于母版页的其他代码
CompilationMode  设置是否在运行时编译母版页。选项包括:Always,表示始终编译页;Auto,在ASP.NET要避免编译页的情况下使用;Never,表示永远不编译页或控件。默认值为Always
CompilerOptions  设置包含用于编译页的编译器选项的字符串。在C#中,这是编译器命令行开关的序列
Description  提供母版页的文本说明
Inherits  设置供页继承的代码隐藏类。它可以是从MasterPage类派生的任何类
Language  设置在对页中所有内联呈现(<% %>和 <%= %>)和代码声明块进行编译时使用的语言。只可以表示.NET Framework支持的任何语言,包括VB、C#和JScript
MasterPageFile  设置用作某个母版页的.master文件。定义嵌套母版页方案中的子母版页时,在母版页中使用MasterPageFile属性

【例3.10】 母版页以C#作为内联代码语言。事件处理代码在名为MasterPageSample的分部类中定义。可以在MasterPageSample.master.cs文件中找到MasterPageSample类的代码,代码如下:

<% @ Master Language="C#" CodeFile="MasterPageSample.master.cs" Inherits="MasterPageSample" %>

以上代码用到了@Master指令中两个重要的属性:CodeFile和Inherits属性。

9. @MasterType指令

@MasterType指令为ASP.NET页的Master属性分配类名,使得该页可以获取对母版页成员的强类型引用。

语法:

<%@ MasterType attribute="value" [attribute="value"...] %>
attribute为@MasterType指令的属性,具体说明如下。

TypeName:指定母版页的类型名称。

VirtualPath:指定生成强类型的文件的路径。

如果未定义VirtualPath属性,则此类型必须存在于当前链接的某个程序集(如App_Bin或App_Code)中。而且TypeName属性和VirtualPath属性不能同时存在于@MasterType指令中,如果同时存在,则@MasterType指令将失败。

【例3.11】 设置母版页的虚拟路径的代码如下。

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

10. @PreviousPageType指令

@PreviousPageType指令为ASP.NET页提供用于获得上一页的强类型的方法,可通过PreviousPage属性访问上一页。该指令只能在Web窗体页(.aspx文件)上使用。

语法:

<%@ PreviousPageType attribute="value" [attribute="value"...] %>

attribute为@PreviousPageType指令的属性,具体说明如下。

TypeName:指定上一页的类型名称。

VirtualPath:生成强类型的文件的路径。

同@MasterType指令相同,@PreviousPageType指令也不能同时定义TypeName属性和VirtualPath属性,如果同时存在,则@PreviousPageType指令将失败。

11. @Reference指令

@Reference指令以声明的方式将网页、用户控件或COM控件连接至目前的网页或用户控件。使用此指令可以动态编译与生成提供程序关联的页面、用户控件或另一个类型的文件,并将其链接到包含@Reference指令的当前网页、用户控件或母版页文件。这样就可以从当前文件内部引用外部编译的对象及其公共成员。

语法:

<%@ Reference Page="value" Control="value" virtualPath="value" %>

@ Reference指令各属性说明。

Page:外部页,ASP.NET动态编译该页并将它链接到包含@Reference指令的当前文件。

Control:外部用户控件,ASP.NET动态编译该控件并将它链接到包含@Reference指令的当前文件。

VirtualPath:引用的虚拟路径。只要生成提供程序存在,可以是任何文件类型。例如,它可能会指向母版页。

【例3.12】 使用@ Reference指令链接用户控件。代码如下。

<%@ Reference Control="MyControl.ascx" %>

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:3.1.2 什么是页面指令
下一篇:3.1.4 注释ASPX文件中代码
相关文章
图文推荐
排行
热门
最新书评
文章
下载
读书
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站