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 ...
随机推荐
- WEB基础技术(汇聚页)
WEB基础技术(汇聚页) ------------------------------------------------- WEB WEB概述 HTML CSS JavaScript JavaScr ...
- 关于sql注入的简要演示
文章分类:周稿 团队成员:sundy 首先可能大家都会问什么是sql? Sql是数据库的一种类型,是用来存储网站数据的. 每当我们点开一个网站,就会从网站的数据库中获取相关的内容. 我们来梳理一下 ...
- Elasticsearch基础知识
ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口Elasticsearch是用Java开发的,并作为Apache ...
- java项目迁移
电脑重装系统以后或者从不同MyEclipse版本迁移项目时候会出现: Project facet Java 1.5 is not supported by target runtime Apache ...
- [原]时间格式化hh:mm:ss和HH:mm:ss区别
hh:mm:ss 按照12小时制的格式进行字符串格式化 如果时间处于00:00:00——12:59:59,则返回的字符串正常 如果时间处于13:00:00——23:59:59,则返回的字符串是实际 ...
- Linux之E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?
解决 ubantu系统中 E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它? 的 问题. 1.解决办法: 当我们有的时候在使用apt-get install/update ...
- jQuery 属性操作attr().prop().text().html().val()
这些方法用于获取和设置 DOM 元素的属性. 一.attr(): <!--样式:在style里面写的,用css来操作.--> <!--属性:在元素里面写的,用attr方法操作.--& ...
- [原创] Trie树 php 实现敏感词过滤
目录 背景 简介 存储结构 PHP 其他语言 字符串分割 示例代码 php 优化 缓存字典树 常驻服务 参考文章 背景 项目中需要过滤用户发送的聊天文本, 由于敏感词有将近2W条, 如果用 str_r ...
- h5 html5 模拟时钟 页面
<!DOCTYPE html> <html><head><meta http-equiv="Content-Type" content=& ...
- C#通过反射执行C#dll所有函数
C# 反射(Reflection) 反射指程序可以访问.检测和修改它本身状态或行为的一种能力. 程序集包含模块,而模块包含类型,类型又包含成员.反射则提供了封装程序集.模块和类型的对象. 您可以使用反 ...