ASP.NET页面支持的指令
页面的处理指令 页面指令的处理用于配置执行该页面的运行时环境。在ASP.NET中,指令可以位于页面的任何位置,但良好且常见的习惯是将其置于文件的开始部分。除此,页面指令的名称是不区分大小写的,且指令的属性(attribute)值也不必加引号。@Page是ASP.NET中最重要的也是最常用的指令。表3.4列出了所有ASP.NET指令。 【101~102】 表3.4 ASP.NET页面支持的指令
除@Page、 @PreviousPageType、@Master、@MasterType和@Control外,所有指令都可以在页面和控件中声明。@Page和 @Control是互斥的:@Page仅能用在.aspx文件中,而@Control指令仅能用在.ascx文件中。@Master用于定义一种非常特殊的页面——母版页(master page)。 处理指令的语法较特殊,但对于所有指令类型都是一致的。多个属性(attribute)必须用空白分割,属性与值间的等号(=)两边不能有空白,如下所示: <%@ Directive_Name attribute="value" [attribute="value" … ] %> 【103】 每种指令都有自己类型化的属性集合。将错误类型的值赋给一个属性,或在某个属性中使用错误的属性,都会导致编译错误。 要点:指令的属性内容总是以纯文本的形式被解析。然而,对于某些属性,应包含能够被解析为特定.NET Framework类型的值。当ASP.NET页面被解析时,所有指令属性 @Page指令 @Page指令只能在.aspx页面中使用,若在其他ASP.NET页(如控件和Web服务)中使用,会导致编译错误。每个.aspx文件最多只能包含一个@Page指令。虽然从语法的角度看,没有必要强制要求指定该指令,但实际几乎所有复杂的页都这样做。 @Page指令大约有30个属性,它们从逻辑上可以分为三类:编译(详见表3.5)、页面整体行为(详见表3.6)和页面输出(详见表3.7)。每个ASP.NET页在第一次请求时进行编译,实际发送给浏览器的HTML是类的方法生成的,而这些类也是动态生成的。表3.5所列的属性用于对编译器参数进行调整,并能够选择要使用的语言。 表3.5 用于页面编译的@Page指令属性
续表
【104~105】 注意,Explicit和Strict属性的默认值从应用程序的配置文件中读取。通过合并所有计算机级、应用程序级和文件夹级的设置,从而获得ASP.NET应用程序的设置。这表明我们还可以控制 Explicit和Strict属性的默认值。如果不更改默认的配置信息(即.NET Framework安装时创建的配置信息),Explicit和Strict便为默认设置true。如果在各配置文件中,删除与其相关的所有设置,二者的值都会变为false。 可通过表3.6列出的属性在某种程度上控制页的整体行为和支持的功能。例如,我们可以设置自定义的错误页、禁用会话状态,以及控制页面的事物处理行为。 表3.6 用于控制页面行为的@Page指令属性
续表
续表
【106~107】 表3.7中列举的属性用于控制为页面生成的输出信息格式。例如,我们可以设置页面的内容类型,或者尽可能地使输出本地化。 表3.7 用于控制输出的@Page指令属性
续表
不难看出,表3.7中的许多属性与页面的本地化有关。ASP.NET(更一般地讲是.NET Framework)极大地简化了构建多语言的国际化应用程序的任务。第5章会深入探讨该问题。 @Assembly指令 @Assembly指令用于将某个程序集链接到当前页面,使其类和接口可以在该页面上使用。在ASP.NET编译该页时,会有几个默认的程序集被链接进去。因此,只有在需要链接一个非默认程序集时,才应使用该指令。表3.8列出了自动提供给编译器的.NET程序集。 【108】 表3.8 默认链接的程序集
除这些程序集外,ASP.NET运行库还会自动将 Web应用程序Bin子目录中的程序集链接到所有页面上。通过编辑计算机级web.config文件中的设置,可以更改、扩展或限制默认的程序集列表。这种更改将作用于运行在该Web服务器上的所有ASP.NET应用程序。此外,还可以编辑应用程序特定的web.config文件,逐一对每个应用程序的程序集列表进行定制。为防止将Bin目录中存在的所有程序集都链接到页面,可以在根配置文件中删除以下代码: <add assembly="*" /> 【109】 警示:对于ASP.NET应用程序,整个配置属性集都在计算机级进行了设置。最初,服务器计算机上运行的所有应用程序共享相同的设置。独立的应用程序可以在其自身的web.config文件中重写其中的某些设置。每个应用程序可以在其根目录放置一个web.config文件,在应用程序特定的子目录下放置其他特殊化的web.config副本。每一页的设置取决于从计算机级到当前文件夹路径发现的所有配置文件中的全部设置。在ASP.NET 1.x中,machine.config文件包含完整的默认设置树。而在ASP.NET 2.0中,与Web应用程序有关的设置数据被移到了web.config文件中,与machine.config处于同一系统文件夹。该文件夹叫 CONFIG,位于ASP.NET安装路径下:%WINDOWS%\Microsoft. Net\Framework\[version] 。 要将所需程序集链接到页面,可使用如下语法: <%@ Assembly Name="AssemblyName" %> <%@ Assembly Src="assembly_code.cs" %> @Assembly指令支持两个互斥属性:Name 和Src。Name用于提示链接到页面的程序集名称。该名称不能包含路径和扩展名。Src用于指示要动态编译并链接到页面的源文件路径。 @Assembly指令可以在页面的主体部分出现多次。事实上,对于每个要链接的程序集来说,都需要分别添加指令。Name和Src不能同时在一个 @Assembly指令中使用,但对于页面中定义的不同指令,则可以分别选择。 提示:虽然 Name指向的是一个已存在的且准备加载的程序集,但Name与Src在性能方面的差别很小。使用Src引用的源文件只在首次被请求时编译一次。 ASP.NET运行库会将源文件与动态编译的程序集进行映射,并在源文件被更改前,一直使用已编译的代码。也就是说,在应用程序级的首次调用过后,无论使用Name还是Src,对页面性能的影响都是相同的。 @Import指令 @Import指令用于将指定的命名空间链接到页面,以便所有已定义类型可以在页面访问,而不必使用完全限定名(fully qualified name)。例如,为创建一ADO.NET DataSet类的实例,可以导入System.Data命名空间,也可以像下面这样使用完全限定名: System.Data.DataSet ds = new System.Data.DataSet(); 【110】 一旦将System.Data命名空间引入当前页,我们就可以像下面这样更自然地编写代码: DataSet ds = new DataSet(); @Import指令的语法是自描述的: <%@ Import namespace="value" %> @Import可以在页面主体中多次使用。 ASP.NET的@Import指令相当于C#的using语句,也相当于Visual Basic .NET的Import语句。回顾非托管的C/C++,可以说该指令所起的作用几乎与#include指令相同。 注意:@Import只能帮助编译器解析类的名称,并不会自动链接所需程序集。使用@Import指令可以缩短类的名称,但倘若包含该类的程序集未被正确地链接,会引发编译器的类型错误。如果程序集尚未被链接,使用“完全限定类名”也无济于事,因为编译器需要类型的定义。您可能已经注意到了,程序集和命名空间的名称往往是一致的。但请记住,这纯属巧合,程序集与命名空间是完全不同的实体,分别需要相应的指令。 例如,为连接SQL Server数据库并获取某些无连接数据,我们需要导入以下两个命名空间: <%@ Import namespace="System.Data" %> <%@ Import namespace="System.Data.SqlClient" %> 我们需要System.Data命名空间以便使用 DataSet和DataTable类,而通过System.Data.SqlClient命名空间来准备并发送命令。在这种情况下,我们不需要另外链接程序集,因为System.Data.dll程序集是默认链接的。 @Implements指令 @Implements指令用于指示当前页面实现的.NET Framework中的特定接口。接口是一组逻辑上相关的函数签名,作为各组件暴露其函数集合的一种契约。与抽象类(abstract class)不同,接口不提供代码或执行功能。若在ASP.NET页中实现某个接口,要在<script>区段中定义所需方法和属性。 @Implements指令的语法如下所示: <%@ Implements interface="InterfaceName" %> 【111】 如果页中需要实现多种接口,@Implements 指令可以在该页中出现多次。注意,如果决定将所有页的逻辑定义在单独的文件中,则不能使用该指令来实现接口,而要在代码隐藏类中进行。 @Reference指令 @Reference指令用于建立当前页与指定页或用户控件间的动态链接。该功能在跨页面通信方面发挥着重大作用。我们可通过它来创建用户控件的强类型实例。让我们来看一下它的语法。 @Reference指令可以多次出现在页面中,并有两个互斥属性:Page和Control。这两个属性都用于指定源文件的路径: <%@ Reference page="source_page" %> <%@ Reference control="source_user_control" %> Page属性用于指向某个.aspx源文件,而 Control属性包含的是.ascx用户控件的路径。在这两种情况下,被引用的源文件都会被动态编译进程序集中,如此一来,在编程时,可以在主动引用页面中使用源文件中定义的类。在运行时,ASP.NET页面是.NET Framework类的实例,带有由方法和属性组成的特定接口。当主动引用页面执行时,被引用页面变为表示.aspx源文件的类,可以按需要对其进行实例化和编码。注意,为使该指令发挥作用,被引用页面必须与主调页面处于一个域中。不允许跨站点调用,且Page和Control属性只接受相对虚拟路径。 |
ASP.NET页面支持的指令的更多相关文章
- SSI注入--嵌入HTML页面中的指令,类似jsp、asp对现有HTML页面增加动态生成内容,见后面例子
SSI注入漏洞总结 from:https://www.mi1k7ea.com/2019/09/28/SSI%E6%B3%A8%E5%85%A5%E6%BC%8F%E6%B4%9E%E6%80%BB%E ...
- (2)ASP.NET 页面指令
页面指令 一共有12个指令,这些指令用来控制APS.NET页面的行为. Assembly,Control,Implements,Import,Master,MasterTpye,OutputCache ...
- ASP.net 页面生命周期
ASP.NET 页面生命周期 Page_Preinit(); 在页初始化开始时发生 Page_Init(); 在所有控件初始化且应用外观设置后引发 Page_InitComplete(); 在页初始化 ...
- ASP.NET 网站支持多语言
ASP.NET网站支持多语言 (本地资源文件和全局资源文件的调用及需注意的地方总结) 一. 本地资源文件(App_LocalResources): ①. 本地资源的生成及调用 1.本地 ...
- C# 问题解决思路--《数组bytes未定义》,ASP.NET页面加载顺序
好久没写博客了,废话不多说,直接说问题. 问题发生情况,首先这个是老项目,然后我是第一次修改.当我解决了各种引用,数据库配置之后等类似的问题,我启动的项目的时候,无任何问题,但是当我点击页面的按钮的时 ...
- (转) ASP.NET页面缓存
原文:http://www.cnblogs.com/Sky_KWolf/archive/2010/12/05/1897158.html 静态页面全部内容保存在服务器内存中.当再有请求时,系统将缓存中的 ...
- asp.net 后台<%@ Page%> page指令属性
aspx文件有如下一行代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=" ...
- Asp.net页面间传值方式汇总
七种传值方式,分别是:URL传值,Session传值,Cookie传值,Server.Transfer传值,Application传值,利用某些控件的PostBackUrl属性和使用@Previous ...
- ASP.NET页面的字符编码设置
在用ASP.NET写网上支付的接口程序时,遇到一个奇怪问题,通过表单提交过去的中文全是乱码,英文正常.而用asp程序进行测试,可以正常提交中文,asp页面中有这样的HTML代码: <meta h ...
随机推荐
- win7 virtio 驱动下载
下载地址: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/
- django系列6--Ajax01 特点, 基本格式, 向前端发送数据
一.Ajax了解 AJAX(Asynchronous Javascript And XML)优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容 优点: 1.ajax使用Java ...
- 手动开发PHP模板引擎 一 (35)
模板叫做TPL,模仿于smarty模板引擎. 我们所说的模板是Web模板,是主要由HTML标记组成的语言来编写的页面,但也有如何表示包含动态生成内容的方式(解析标签).模板引擎是一种软件库,允许我们从 ...
- Python面向对象(定义类和创建对象)
day24 http://www.cnblogs.com/wupeiqi/p/4493506.html Python:函数式+面向对象,函数式编程可以做所有事,但是不一定合适. 小明,10岁,男,上山 ...
- MongoDB学习笔记之Mongoose的使用
http://blog.csdn.net/sinat_25127047/article/details/50560167
- Display all 2232 possibilities? (y or n)
Linux下我在没输入任何命令的情况下摁了两下tab键,然后就出现了这个提示:Display all 2232 possibilities? (y or n) 我觉得摁y的话就会显示所有的现阶段命令. ...
- itemgetter和groupby
一. itemgetter的使用方法 itemgetter()返回一个指定列表下标或者字典键的函数,通过这个返回的函数作用到对象上,获得才能取得相应的值 1. 排序字典列表的一个例子 from ope ...
- 使用java执行ffmpeg命令进行推流操作
视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpe ...
- 线索二叉树的理解和实现(Java)
线索二叉树的基本概念 我们按某种方式对二叉树进行遍历,将二叉树中所有节点排序为一个线性序列,在该序列中,除第一个结点外每个结点有且仅有一个直接前驱结点:除最后一个结点外每一个结点有且仅有一个直接后继结 ...
- ObjectMapper 动态用法
class DymicObject { private Object o; public DymicObject(Object o) { this.o = o; } p ...