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