ASP.NET指令ASP.NET 2.0
ASP.NET指令在每個ASP.NET頁面中都有。使用這些指令可以控制ASP.NET頁面的行為。
在ASP.NET頁面或用戶控件中有11個指令。無論頁面是使用后臺編碼模型還是內(nèi)置編碼模型,都可以在應(yīng)用程序中使用這些指令。
基本上,這些指令都是編譯器編譯頁面時使用的命令。把指令合并到頁面中是很簡單的。指令的格式如下:
<%@ [Directive] [Attribute=Value] %>
在上面的代碼行中,指令以<%@開頭,以%>結(jié)束。最好把這些指令放在頁面或控件的頂部,因為開發(fā)人員傳統(tǒng)上都把指令放在那里(但如果指令位于其他地方,頁面仍能編譯)。當(dāng)然,也可以把多個屬性添加到指令語句中,如下所示:
<%@ [Directive] [Attribute=Value] [Attribute=Value] %>
表3-3描述了ASP.NET 2.0中的指令:
表 3-3 指令
說明
Assembly
把程序集鏈接到與它相關(guān)的頁面或用戶控件上
Control
用戶控件(.ascx)使用的指令,其含義與Page指令相當(dāng)
Implements
實現(xiàn)指定的.NET Framework接口
Import
在頁面或用戶控件中導(dǎo)入指定的命名空間
Master
允許指定master頁面——在解析或編譯頁面時使用的特定屬性和值。這個指令只能與master頁面(.master)一起使用
MasterType
把類名與頁面關(guān)聯(lián)起來,獲得包含在特定master頁面中的強(qiáng)類型化的引用或成員
OutputCache
控制頁面或用戶控件的輸出高速緩存策略
Page
允許指定在解析或編譯頁面時使用的頁面特定屬性和值。這個指令只能與ASP.NET頁面(.aspx)一起使用
PreviousPageType
允許ASP.NET頁面處理應(yīng)用程序中另一個頁面的回送信息
Reference
把頁面或用戶控件鏈接到當(dāng)前的頁面或用戶控件上
Register
給命名空間和類名關(guān)聯(lián)上別名,作為定制服務(wù)器控件語法中的記號
下面幾節(jié)簡要介紹這些指令。
1.@Page@Page指令允許為ASP.NET頁面(.aspx)指定解析和編譯頁面時使用的屬性和值。這是最常用的指令。ASP.NET頁面是ASP.NET的一個重要部分,所以它有許多屬性。表3-4總結(jié)了@Page指令的可用屬性。
表3-4
屬性
說明
AspCompat
若其值為True,就允許頁面在單線程的單元中執(zhí)行,這個屬性的默認(rèn)設(shè)置是False。
Async
指定ASP.NET頁面是同步或異步處理
AutoEventWireUp
設(shè)置為True時,指定頁面事件自動觸發(fā)。這個屬性的默認(rèn)設(shè)置是True
Buffer
設(shè)置為True時,支持HTTP響應(yīng)緩存。這個屬性的默認(rèn)設(shè)置是True
ClassName
指定編譯頁面時綁定到頁面上的類名
CodeFile
引用與頁面相關(guān)的后臺編碼文件
CodePage
指定響應(yīng)的代碼頁面值
CompilerOptions
編譯器字符串,指定頁面的編譯選項
CompileWith
包含一個String值,指向所使用的后臺編碼文件
ContentType
把響應(yīng)的HTTP內(nèi)容類型定義為標(biāo)準(zhǔn)MIME類型
Culture
指定頁面的文化設(shè)置。ASP.NET 2.0允許把Culture 屬性的值設(shè)置為Auto ,支持自動檢測需要的文化
Debug
設(shè)置為True時,用調(diào)試符號編譯頁面
Description
提供頁面的文本描述。ASP.NET解析器忽略這個屬性及其值
EnableSessionState
設(shè)置為True時,支持頁面的會話狀態(tài),其默認(rèn)設(shè)置是True
EnableTheming
設(shè)置為True時,頁面可以使用主題。其默認(rèn)設(shè)置是False.
EnableViewState
設(shè)置為True時,在頁面中維護(hù)視圖狀態(tài),其默認(rèn)設(shè)置是True
EnableViewStateMac
設(shè)置為True時,當(dāng)用戶回送頁面時,頁面會在視圖狀態(tài)上進(jìn)行機(jī)器范圍內(nèi)的身份驗證,其默認(rèn)設(shè)置是False
ErrorPage
為所有未處理的頁面異常指定用于發(fā)送信息的URL
Explicit
設(shè)置為True時,支持Visual Basic的Explicit選項。其默認(rèn)設(shè)置是False
Language
定義內(nèi)置顯示和腳本塊所使用的語言
LCID
為Web Form的頁面定義本地標(biāo)識符
LinePragmas
Boolean值,指定得到的程序集是否使用行附注
MasterPageFile
帶一個 String 值,指向頁面所使用的master頁面的地址。這個屬性在內(nèi)容頁面中使用
MaintainScrollPositionOn
Postback
帶一個Boolean 值,表示在回送頁面時,頁面是位于相同的滾動位置上,還是在最高的位置上重新生成頁面
PersonalizationProvider
帶一個 String 值,指定把個性化信息應(yīng)用于頁面時所使用的個性化提供程序名
ResponseEncoding
指定頁面內(nèi)容的響應(yīng)編碼
(續(xù)表)
屬性
說明
SmartNavigation
指定是否為功能更豐富的瀏覽器激活A(yù)SP.NET智能導(dǎo)航功能。它把回送信息返回到頁面的當(dāng)前位置,其默認(rèn)值是False
Src
指向類的源文件,用于所顯示的頁面的后臺編碼
Strict
設(shè)置為True時,使用Visual Basic Strict模式編譯頁面,其默認(rèn)值是False
Theme
使用ASP.NET 2.0的主題功能,把指定的主題應(yīng)用于頁面
Title
應(yīng)用頁面的標(biāo)題。這個屬性主要用于必須應(yīng)用頁面標(biāo)題的內(nèi)容頁面,而不是應(yīng)用master頁面中指定內(nèi)容的頁面
Trace
設(shè)置為True時,激活頁面跟蹤,其默認(rèn)值是False
TraceMode
指定激活跟蹤功能時如何顯示跟蹤消息。這個屬性的設(shè)置可以是SortByTime 或SortByCategory,默認(rèn)設(shè)置是SortByTime
Transaction
指定頁面上是否支持事務(wù)處理。這個屬性的設(shè)置可以是NotSupported、Supported、Required和RequiresNew,默認(rèn)設(shè)置是NotSupported
UICulture
UICulture 屬性的值指定ASP.NET 頁面使用什么UI Culture。 ASP.NET 2.0允許給UICulture屬性使用Auto值,支持自動檢測UICulture
ValidateRequest
設(shè)置為True時,根據(jù)一組潛在危險的值檢查窗體輸入值,幫助防止Web應(yīng)用程序受到有害的攻擊,例如JavaScript攻擊。默認(rèn)值是True
WarningLevel
指定停止編譯頁面時的編譯警告級別,其值可以是0到4
2.@Control@Control 指令類似于@Page指令,但 @Control指令是在建立ASP.NET用戶控件時使用的。@Control指令允許定義用戶控件要繼承的屬性。這些屬性值會在解析和編譯頁面時賦予 用戶控件。@Control指令的可用屬性比@Page指令少,但其中有許多都可以在建立用戶控件時進(jìn)行需要的修改。表3-6詳細(xì)介紹了這些可用屬性。
表3-6
屬性
說明
AutoEventWireUp
設(shè)置為True時,指定用戶控件的事件是否自動觸發(fā)。默認(rèn)設(shè)置為True
ClassName
指定編譯頁面時綁定到用戶控件上的類名
CodeFile
引用與用戶控件相關(guān)的后臺編碼文件
CompilerOptions
編譯字符串,表示用戶控件的編譯選項
CompileWith
帶一個String值,指向用于用戶控件的后臺編碼文件
Debug
設(shè)置為True時,用調(diào)試符號編譯用戶控件
(續(xù)表)
屬性
說明
Description
提供用戶控件的文本描述。ASP.NET 解析器會忽略這個屬性及其值
EnableTheming
設(shè)置為True時,表示用戶控件可以使用主題功能。其默認(rèn)設(shè)置是False
EnableViewState
設(shè)置為True時,維護(hù)用戶控件的視圖狀態(tài)。其默認(rèn)設(shè)置是True
Explicit
設(shè)置為True時,表示激活Visual Basic Explicit 選項。其默認(rèn)設(shè)置是False
Inherits
指定用戶控件要繼承的CodeBehind類
Language
定義內(nèi)置顯示和腳本塊使用的語言
LinePragmas
Boolean值,指定得到的程序集是否使用行附注
Src
指向類的源文件,用于要顯示的用戶控件的后臺編碼
Strict
設(shè)置為True時,使用Visual Basic Strict模式編譯用戶控件。其默認(rèn)設(shè)置是False
WarningLevel
指定停止編譯頁面時的編譯警告級別,其值可以是0到4
@Control指令用于ASP.NET用戶控件。
3. @Import
@Import指令允許指定要導(dǎo)入到ASP.NET頁面或用戶控件中的命名空間。導(dǎo)入了命名空間后,該命名空間中的所有類和接口就可以在頁面和用戶控件中使用了。這個指令只支持一個屬性Namespace。
Namespace屬性帶一個String值,它指定要導(dǎo)入的命名空間。@Import指令不能包含多個屬性/值對。所以,必須把多個命名空間導(dǎo)入指令放在多行代碼上,如下所示:
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
應(yīng) 用程序已經(jīng)引用了幾個程序集,查看C:\ Windows\Microsoft.NET\Framework\v2.0 xxxxx \CONFIG中的web.config.comments文件,就可以找到這些已導(dǎo)入命名空間的列表。這個程序集列表從< compilation>元素的<assemblies>子元素中引用。Web.config.comments文件中的設(shè)置如下所 示:
<assemblies>
<add assembly="mscorlib" />
<add assembly="System, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089" />
<add assembly="System.Web, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
<add assembly="System.Data, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089" />
<add assembly="System.Web.Services, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
<add assembly="System.Xml, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089" />
<add assembly="System.Drawing, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
<add assembly="System.EnterpriseServices, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
<add assembly="System.Web.Mobile, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
<add assembly="*" />
</assemblies>
web.config.comments 文件中有這個引用,所以這些程序集不需要像ASP.NET 1.0/1.1那樣在References文件夾中引用??梢蕴砑踊騽h除在這個列表中引用的程序集。例如,如果服務(wù)器上的每個應(yīng)用程序都引用了一個定制程 序集,就可以在其他程序集的下面添加對定制程序集的類似引用。注意還可以通過應(yīng)用程序的web.config文件完成這個任務(wù)。
盡管程序集已引用,仍必須在頁面中導(dǎo)入這些程序集的命名空間。web.config.comments文件包含自動導(dǎo)入到應(yīng)用程序的頁面中的命名空間列表,這是通過<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頁面都導(dǎo)入了許多命名空間??梢栽趙eb.config.comments文件中自由修改這個列表,甚至可以在應(yīng)用程序的web.config文件中包含類似的命名空間列表。
把 命名空間導(dǎo)入到ASP.NET頁面或用戶控件,使用類時就不必完全限定類名。例如,在ASP.NET頁面中導(dǎo)入System.Data.OleDB命名空 間,就可以使用單個類名來引用這個命名空間中的類(即使用OLEDBConnection,而不是 System.Data.OleDB.OLEDBConnection)。
4.@Implements @Implements指令允許ASP.NET頁面實現(xiàn)特定的.NET Framework接口。這個指令只支持一個Interface屬性。
Interface屬性直接指定了.NET Framework接口。ASP.NET頁面或用戶控件實現(xiàn)一個接口時,就可以直接訪問其中的所有事件、方法和屬性。
下面是@Implements指令的一個例子:
<%@ Implements Interface="System.Web.UI.IValidator" %>
5. @Register
@Register 指令把別名與命名空間和類名關(guān)聯(lián)起來,作為定制服務(wù)器控件語法中的記號。把一個用戶控件拖放到.aspx頁面上時,就使用了@Register指令。把用 戶控件拖放到.aspx頁面上,Visual Studio 2005就會在頁面的頂部創(chuàng)建一個@Register指令。這樣就在頁面上注冊了用戶控件,該控件就可以通過特定的名稱在.aspx頁面上訪問了。
@Register指令支持5個屬性,如表3-7所示。
表3-7
屬性
說明
Assembly
與TagPrefix關(guān)聯(lián)的程序集
Namespace
與TagPrefix關(guān)聯(lián)的命名空間
Src
用戶控件的位置
TagName
與類名關(guān)聯(lián)的別名
TagPrefix
與命名空間關(guān)聯(lián)的別名
下面是使用@Register指令把用戶控件導(dǎo)入ASP.NET頁面的一個例子:
<%@ Register TagPrefix="MyTag" Namespace="MyName:MyNamespace" Assembly="MyAssembly" %>
6.@Assembly@Assembly指令在編譯時把程序集(.NET應(yīng)用程序的構(gòu)建塊)關(guān)聯(lián)到ASP.NET頁面或用戶控件上,使該程序集中的所有類和接口都可用于頁面。這個指令支持兩個屬性Name和Src。
●Name:允許指定用于關(guān)聯(lián)頁面文件的程序集名稱。程序集名稱應(yīng)只包含文件名,不包含文件的擴(kuò)展名。例如,如果文件是MyAssembly.vb,Name屬性值應(yīng)是MyAssembly。
●Src:允許指定編譯時使用的程序集文件源。
下面是使用@Assembly指令的一些例子:
<%@ Assembly Name="MyAssembly" %>
<%@ Assembly Src="MyAssembly.vb" %>
7.@PreviousPageType這個指令用于指定跨頁面的傳送過程起始于哪個頁面。在ASP.NET頁面之間的跨頁面?zhèn)魉瓦^程詳見后面的“跨頁面?zhèn)魉?#8221;一節(jié)和第19章。
@PreviousPageType指令是一個新指令,用于處理ASP.NET 2.0提供的跨頁面?zhèn)魉托鹿δ堋_@個簡單的指令只包含兩個屬性TypeName和VirtualPath:
●TypeName:設(shè)置回送時的派生類名。
●VirtualPath:設(shè)置回送時所傳送頁面的地址。
8.@MasterType@MasterType指令把一個類名關(guān)聯(lián)到ASP.NET頁面上,以獲得特定master頁面中包含的強(qiáng)類型化引用或成員。這個指令支持兩個屬性:
●TypeName:設(shè)置從中獲得強(qiáng)類型化的引用或成員的派生類名。
●VirtualPath:設(shè)置從中檢索這些強(qiáng)類型化的引用或成員的頁面地址。
使用@MasterType指令的細(xì)節(jié)請參閱第8章。下面是它的一個例子:
<%@ MasterType VirtualPath="~/Wrox.master" %>
9.@OutputCache@OutputCache指令控制ASP.NET頁面或用戶控件的輸出高速緩存策略。這個指令支持10個屬性,如表3-8所示。
表3-8
屬性
說明
CacheProfile
允許使用集中式方法管理應(yīng)用程序的高速緩存配置。使用CacheProfile屬性可指定在web.config文件中詳細(xì)說明的高速緩存配置名
DiskCacheable
指定高速緩存是否能存儲在磁盤上
Duration
ASP.NET 頁面或用戶控件高速緩存的持續(xù)時間,單位是秒
Location
位置枚舉值,默認(rèn)為Any。它只對.aspx頁面有效,不能用于用戶控件(.ascx)。其他值有Client、Downstream、None、Server和ServerAndClient
NoStore
指定是否隨頁面發(fā)送沒有存儲的標(biāo)題
SqlDependency
支持頁面使用SQL Server高速緩存失效功能,這是ASP.NET 2.0的一個新功能
VaryByControl
用分號分隔開的字符串列表,用于改變用戶控件的輸出高速緩存
VaryByCustom
一個字符串,指定定制的輸出高速緩存需求
VaryByHeader
用分號分隔開的HTTP標(biāo)題列表,用于改變輸出高速緩存
VaryByParam
用分號分隔開的字符串列表,用于改變輸出高速緩存
下面是使用@OutputCache指令的一個例子:
<%@ OutputCache Duration="180" VaryByParam="None" %>
Duration屬性指定這個頁面存儲在系統(tǒng)高速緩存中的時間(秒)。
10.@Reference@Reference指令聲明,另一個ASP.NET頁面或用戶控件應(yīng)與當(dāng)前活動的頁面或控件一起編譯。這個指令支持兩個屬性:
●TypeName:設(shè)置從中引用活動頁面的派生類名。
●VirtualPath:設(shè)置從中引用活動頁面的頁面或用戶控件地址。
下面是使用@Reference指令的一個例子:
<%@ Reference VirtualPath="~/MyControl.ascx" %>
11.@Master@Master 指令非常類似于@Page指令,但@Master指令用于master頁面(.master)。在使用@Master指令時,要指定和站點上的內(nèi)容頁面一 起使用的模板頁面的屬性。內(nèi)容頁面(使用@Page指令建立)可以繼承master頁面上的所有master內(nèi)容(在master頁面上使用 @Master指令定義的內(nèi)容)。盡管這兩個指令是類似的,但@Master指令的屬性比@Page指令少。@Master指令的可用屬性如表3-5所 示。
表 3-5
屬 性
說 明
AutoEventWireUp
設(shè)置為True時,指定master頁面的事件是否自動觸發(fā)。默認(rèn)設(shè)置為True
ClassName
指定編譯頁面時綁定到master頁面上的類名
CodeFile
引用與頁面相關(guān)的后臺編碼文件
(續(xù)表)
屬 性
說 明
CompilerOptions
編譯字符串,表示master頁面的編譯選項
CompileWith
帶一個String值,指向用于master頁面的后臺編碼文件
Debug
設(shè)置為True時,用調(diào)試符號編譯master頁面
Description
提供master頁面的文本描述。ASP.NET 解析器會忽略這個屬性及其值
EnableTheming
設(shè)置為True時,表示master頁面可以使用主題功能。其默認(rèn)設(shè)置是False
EnableViewState
設(shè)置為True時,維護(hù)master頁面的視圖狀態(tài)。其默認(rèn)設(shè)置是True
Explicit
設(shè)置為True時,表示激活Visual Basic Explicit 選項。其默認(rèn)設(shè)置是False
Inherits
指定master頁面要繼承的CodeBehind類
Language
定義內(nèi)置顯示和腳本塊使用的語言
LinePragmas
Boolean值,指定得到的程序集是否使用行附注
MasterPageFile
帶一個String值,指向master 頁面所使用的master頁面的地址。master頁面可以使用另一個master頁面,創(chuàng)建嵌套的master頁面
Src
指向類的源文件,用于要顯示的master頁面的后臺編碼
Strict
設(shè)置為True時,使用Visual Basic Strict模式編譯master頁面。其默認(rèn)設(shè)置是False
WarningLevel
指定停止編譯頁面時的編譯警告級別,其值可以是0到4
下面是使用@Master指令的一個例子:
<%@ Master Language="VB" CodeFile="MasterPage1.master.vb" AutoEventWireup="false" Inherits="MasterPage" %>
---------------------------------------------------------------------