当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

5.2ASP.NET页面指令

8/31/2020 9:56:04 PM 人评论

5.2ASP.NET页面指令

图片 1 知识点讲解:光盘:视频\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指令的用法及属性进行详细介绍。

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"
%>

@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"
 %>

@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="使用例子" 
%>

@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)。

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

下面是使用@Implements指令的一行代码。

<%@ Implements Inter %>

@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指令。

@PreviousPageType指令的功能是指定跨页面的传送过程起始于哪个页面。此指令是一个新指令,用于处理ASP.NET 2.0提供的跨页面传送新功能。@PreviousPageType指令只包含如下两个属性。

  • TypeName:设置回送时的派生类名。
  • VirtualPath:设置回送时所传送页面的地址。

@MasterType指令能够把一个类名关联到ASP.NET页面上,以获得特定Master页面中包含的强类型化引用或成员。这个指令支持如下2个属性。

  • TypeName:设置从中获得强类型化的引用或成员的派生类名。
  • VirtualPath:设置从中检索这些强类型化的引用或成员的页面地址。

下面是使用@MasterType指令的一个例子。

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

@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

用分号分隔开的字符串列表,用于改变输出高速缓存

@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所示。

图片 48

图5-5 执行效果

@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所示。

图片 49

图5-6 执行效果

相关教程

共有条评论 网友评论

验证码: 看不清楚?