以程式設計方式評估能力
更新:2007 年 11 月
對於 ASP.NET Mobile 控制項,凡是透過 Web.config 檔 <deviceFilters> 區段所提供的功能,都可以使用 MobileCapabilities 類別 (Class) 的 HasCapability 方法,以程式設計方式存取。藉由呼叫這個方法,您可評估比較方法。
HasCapability 方法有助於以程式設計方式判斷目前的裝置是否能滿足在 Web.config 檔中宣告的裝置篩選條件。MobileCapabilities 執行個體 (Instance) 會快取 HasCapability 方法的評估,以便後續針對相同能力名稱和選擇引數的要求不需要重新進行評估。當您要撰寫符合 ASP.NET 網頁架構在 <DeviceSpecific> 項目中對於各種選項之選取方式的程式碼時,HasCapability 方法會非常有用。
注意事項: |
---|
HasCapability 方法不支援會呼叫定義於此網頁之方法的 <DeviceSpecific> 項目選項。 |
HasCapability 方法會接受下面兩個引數:capabilityName,這是在能力字典中之裝置評估方法、屬性或項目的名稱;以及 optionalArgument,這是 capabilityName 引數所需要的任何引數。HasCapability 方法會以下列順序執行評估:
它會檢查 capabilityName 值是否為指定於 Web.config 檔中的裝置篩選條件名稱。
注意事項: HasCapability 方法會將 optionalArgument 引數設定為 null,以評估 <DeviceSpecific> 和 <Choice> 建構。
如果在步驟 1 中的測試傳回 true,而篩選條件為委派的評估工具 (即使用自訂方法來評估所指定資料的篩選條件),HasCapability 方法便會以在 optionalArgument 參數中提供的引數叫用 (Invoke) 委派 (Delegate),再傳回結果。
如果步驟 1 中的測試是 true,而篩選條件為比較評估工具 (即將能力名稱和某個值作比較的篩選條件),HasCapability 方法會以在評估工具中提供的能力名稱和引數呼叫自己 (此時任何原始 optionalArgument 參數會遭忽略),再傳回結果。
如果 MobileCapabilities 物件具有名為 capabilityName 的屬性,HasCapability 方法便會將這個屬性轉型 (Cast) 成字串,並會在 optionalArgument 值等於此字串時傳回 true。布林 (Boolean) 比較是不區分大小寫的;其他比較則會區分大小寫。因此,"true" 等於 "True",但是 "left" 則不等於 "Left"。
如果不存在任何 capabilityName 屬性,HasCapability 方法便會在與 MobileCapabilities 物件相關聯的能力字典中進行查詢。如果 capabilityName 屬性存在,HasCapability 方法便會比較其值與 optionalArgument 參數,接著傳回結果。由於字典會保留字串,因此不需要轉型。
如果這些測試都失敗,HasCapability 方法便會擲回 ArgumentOutOfRangeException 例外狀況 (Exception)。
範例
下列範例示範會如何呼叫 HasCapability 方法,其中 GPSEnabled 和 ScreenBitDepth 是 Items 集合中已定義的篩選條件、屬性或值。
((MobileCapabilities)Request.Browser).HasCapability("GPSEnabled", null);
或者,您可以用下列方式呼叫方法:
((MobileCapabilities)Request.Browser).HasCapability("ScreenBitDepth", "8");