deviceFilters與設備過濾

本主題是ASP.NET在移動設備上展現的方面的內容 css

   

起初看起來deviceFilters與前面的browserCaps相似。一樣也會關聯到HttpBrowserCapabilities,而在這裏用到的是MobileCapabilities,可是細看後發現browserCaps關注的是瀏覽器,deviceFilters關注的是設備自己。 html

定義了設備篩選器以後,您能夠將其應用於 ASP.NET 移動控件中以定義特定於設備的呈現。 應用的設備篩選器映射到 .aspx 文件中 DeviceSpecific構造內的 <choice> 元素。 而後,您能夠爲這些應用的設備篩選器設置屬性重寫和模板化。 一些特定於設備的自定義示例包括:web

  • 重寫控件的屬性,例如根據顯示功能爲 Image 控件選擇不一樣的圖像。
  • 對不一樣的移動設備使用不一樣的呈現樣式。
  • 在設備(例如 Pocket PC)上使用模板實現更豐富的呈現。

    這些方案中的每個都須要根據目標設備是否與 Web.config 文件中的 <deviceFilters> 節匹配來進行篩選。 這些篩選器也可能遍及在應用程序中,而不是隻出如今一個地方。編程

    實際上服務端從一個HTTP請求得知這些信息,請求頭確定有附帶。在面前的內容知道,瀏覽器的信息經過對User-Agent的識別,再經過瀏覽器功能定義,把結果存放在HttpBrowserCapabilities中,而這裏對設備功能斷定的就是基於這裏得出的HttpBrowserCapabilities來進行。 瀏覽器

    ASP.NET內置的設備功能可查看附表1 ide

    能夠從兩種設備篩選器中進行選擇:比較計算器或計算委託。 post

    對於簡單的比較,能夠經過提供功能的名稱和要與之比較的值,指定基於比較的篩選器。 在運行時,若是功能值和提供的值相等,則設備篩選器的計算結果爲 true。 布爾值屬性在比較時不區分大小寫;所以,true 和 True 都有效。 其餘屬性比較區分大小寫。 測試

    對於更復雜的計算,您能夠經過提供方法的類和方法名指定基於計算委託的篩選器。 在運行時,調用所提供的方法來肯定設備篩選器的計算結果是否爲 true。 ui

    在Web.config文件中配置以下 lua

    <deviceFilters>
    <filter name="IsHtml" 
    compare="PreferredRendering" 
    argument="html32" />
    <filter name="GPSEnabled" 
    type="MyApplication.MyCapabilityEvaluators,MyApplication" 
    method="IsGPSEnabled" />
    </deviceFilters>

     對於第一個filter是用比較計算器的,compare特性是指定由比較計算器計算的瀏覽器功能。 該功能能夠是任何內置功能,也能夠是任何其餘自定義功能計算器的名稱。argument特性是指定該功能應與之比較的參數;

    對於第二個filter是用計算委託,type是指定提供計算委託的類類型。是類的徹底限定名:(類的全名+","+程序集名稱),method特性是指定提供計算委託的方法。

    下面的示例演示如何定義名爲 isHTML32 的設備篩選器。

    <filter name="isHTML32" compare="PreferredRenderingType" argument="html32" />

     在運行時,此篩選器將當前請求的 MobileCapabilities 實例的 PreferredRenderingType 屬性值與值 html32 進行比較。

    下面的示例演示如何定義名爲 GPSEnabled 的新功能。

    namespace MyAssembly
    {
    publicclass MyCapabilityEvaluators
    {
    publicstaticbool IsGPSEnabled(
    System.Web.Mobile.MobileCapabilities capabilities,
    String unusedArg)
    {
    // processing code
    }
    }
    }

    將如下元素添加到適當的 Web.config 文件以添加新功能:

    <filter name="GPSEnabled" 
    type="MyNamespace.MyCapabilityEvaluators, MyAssembly"
    method="IsGPSEnabled" />

    若是使用 Filter 屬性指定方法名稱,則該方法必須符合如下原型

    public bool methodName(
    System.Web.Mobile.MobileCapabilities capabilities,
    String optionalArgument);

    若須要獲取設備是否支持指定功能能夠使用如下方式

    對於內置的功能除了能夠用MobileCapabilities的屬性進行比較外,還能夠這樣子

    ((System.Web.Mobile.MobileCapabilities)System.Web.HttpContext.Current.Request.Browser).HasCapability("ScreenBitDepth", "8");

    返回的是一個bool值,代表是否具有該功能;

    對於自定義的功能,只能經過HasCapability

    ((System.Web.Mobile.MobileCapabilities)System.Web.HttpContext.Current.Request.Browser).HasCapability("GPSEnabled", null);

     HasCapability 方法使用兩個參數:capabilityName,它是功能字典中設備計算方法、屬性或項的名稱;optionalArgument,它是 capabilityName參數須要的任何參數。 HasCapability 方法按照如下順序執行其計算:

  1. 它檢查 capabilityName 值是不是 Web.config 文件中指定的設備篩選器的名稱。

注意

HasCapability 方法經過將 optionalArgument 參數設置爲 null 來計算 <DeviceSpecific> 和 <Choice> 構造。

  1. 若是第 1 步中的測試返回 true 而且篩選器是委託計算器(使用自定義方法計算指定數據的篩選器),則 HasCapability 方法將使用optionalArgument 參數中提供的參數調用委託並返回結果。
  2. 若是第 1 步中的測試返回 true 而且篩選器是比較計算器(將功能名與某個指定的值進行比較的篩選器),則 HasCapability 方法將使用該功能名和計算器中提供的參數(忽略全部原始 optionalArgument 參數)調用其自己並返回結果。
  3. 若是 MobileCapabilities 對象具備名爲 capabilityName 的屬性,則 HasCapability 方法將此屬性強制轉換爲字符串並在optionalArgument 值等於該字符串時返回 true。 布爾型比較不區分大小寫;其餘比較區分大小寫。 所以,"true"等同於"True",但"left"不等於"Left"。
  4. 若是不存在任何 capabilityName 屬性,則 HasCapability 方法將在與 MobileCapabilities 對象關聯的功能字典中進行查找。 若是capabilityName 屬性存在,則 HasCapability 方法將其與 optionalArgument 參數進行比較並返回結果。 由於字典能夠維護字符串,因此無需進行強制轉換。
  5. 若是這些測試失敗,HasCapability 方法將引起 ArgumentOutOfRangeException 異常。

   

   

   

附表1

下表從適配器開發人員的角度列出了 ASP.NET 移動控件設備屬性及有效的標記語言。 此表還列出對於應用程序邏輯中的常規使用有效、從而適用於全部標記語言的屬性(一般不是呈現標記的屬性)。

Property

常規使用

HTML 和 XHTML

cHTML

WML

Browser

CanCombineFormsInDeck

CanInitiateVoiceCall

CanRenderEmptySelects

CanRenderInputAndSelectElementsTogether

CanRenderMixedSelects

CanRenderOneventAndPrevElementsTogether

CanRenderPostBackCards

CanRenderSetvarZeroWithMultiSelectionList

CanSendMail

DefaultSubmitButtonLimit

GatewayMajorVersion

GatewayMinorVersion

GatewayVersion

HasBackButton

HidesRightAlignedMultiselectScrollbars

InputType

IsColor

IsMobileDevice

Item

MaximumRenderedPageSize

MaximumSoftkeyLabelLength

MobileDeviceManufacturer

MobileDeviceModel

NumberOfSoftkeys

PreferredImageMime

PreferredRenderingMime

PreferredRenderingType

RendersBreakBeforeWmlSelectAndInput

RendersBreaksAfterHtmlLists

RendersBreaksAfterWmlAnchor

RendersBreaksAfterWmlInput

RendersWmlDoAcceptsInline

RendersWmlSelectsAsMenuCards

RequiredMetaTagNameValue

RequiresContentTypeMetaTag

RequiresAttributeColonSubstitution

RequiresHtmlAdaptiveErrorReporting

RequiresLeadingPageBreak

RequiresNoBreakInFormatting

RequiresOutputOptimization

RequiresPhoneNumbersAsPlainText

RequiresSpecialViewStateEncoding

RequiresUniqueFilePathSuffix

RequiresUniqueHtmlCheckboxNames

RequiresUniqueHtmlInputNames

RequiresUrlEncodedPostfieldValues

ScreenBitDepth

ScreenCharactersHeight

ScreenCharactersWidth

ScreenPixelsHeight

ScreenPixelsWidth

SupportsAccesskeyAttribute

SupportsBodyColor

SupportsBold

SupportsCacheControlMetaTag

SupportsCss

SupportsDivAlign

SupportsDivNoWrap

SupportsFontColor

SupportsFontName

SupportsFontSize

SupportsImageSubmit

SupportsIModeSymbols

SupportsInputIStyle

SupportsInputMode

SupportsItalic

SupportsJPhoneMultiMediaAttributes

SupportsJPhoneSymbols

SupportsQueryStringInFormAction

SupportsSelectMultiple

SupportsUncheck

   

MSDN參考

移動設備功能(總覽頁)

來自 <https://msdn.microsoft.com/zh-cn/library/wa9x6tza(v=vs.100).aspx>

   

設備篩選建議

來自 <https://msdn.microsoft.com/zh-cn/library/8xef2eak(v=vs.100).aspx>

   

設備功能表

來自 <https://msdn.microsoft.com/zh-cn/library/dcwa1kf5(v=vs.100).aspx>

   

爲多個設備配置 Web 應用程序 

來自 <https://msdn.microsoft.com/zh-cn/library/fcs06t52(v=vs.100).aspx>

   

以編程方式計算功能

來自 <https://msdn.microsoft.com/zh-cn/library/2cf6d1wd(v=vs.100).aspx>

   

設備計算方法

來自 <https://msdn.microsoft.com/zh-cn/library/hweskhy5(v=vs.100).aspx>

相關文章
相關標籤/搜索