deviceFilters与设备过滤

本主题是ASP.NET在移动设备上展示的方面的内容

   

起初看起来deviceFilters与前面的browserCaps类似。同样也会关联到HttpBrowserCapabilities,而在这里用到的是MobileCapabilities,但是细看后发现browserCaps关注的是浏览器,deviceFilters关注的是设备本身。

定义了设备筛选器之后,您可以将其应用于 ASP.NET 移动控件中以定义特定于设备的呈现。 应用的设备筛选器映射到 .aspx 文件中 DeviceSpecific构造内的 <choice> 元素。 然后,您可以为这些应用的设备筛选器设置属性重写和模板化。 一些特定于设备的自定义示例包括:

  • 重写控件的属性,例如根据显示功能为 Image 控件选择不同的图像。
  • 对不同的移动设备使用不同的呈现样式。
  • 在设备(例如 Pocket PC)上使用模板实现更丰富的呈现。

    这些方案中的每一个都需要根据目标设备是否与 Web.config 文件中的 <deviceFilters> 节匹配来进行筛选。 这些筛选器也可能遍布在应用程序中,而不是只出现在一个地方。

    实际上服务端从一个HTTP请求得知这些信息,请求头肯定有附带。在面前的内容知道,浏览器的信息通过对User-Agent的识别,再通过浏览器功能定义,把结果存放在HttpBrowserCapabilities中,而这里对设备功能判定的就是基于这里得出的HttpBrowserCapabilities来进行。

    ASP.NET内置的设备功能可查看附表1

    可以从两种设备筛选器中进行选择:比较计算器或计算委托。

    对于简单的比较,可以通过提供功能的名称和要与之比较的值,指定基于比较的筛选器。 在运行时,如果功能值和提供的值相等,则设备筛选器的计算结果为 true。 布尔值属性在比较时不区分大小写;因此,true 和 True 都有效。 其他属性比较区分大小写。

    对于更复杂的计算,您可以通过提供方法的类和方法名指定基于计算委托的筛选器。 在运行时,调用所提供的方法来确定设备筛选器的计算结果是否为 true。

    在Web.config文件中配置如下

    <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>

   

posted @ 2016-09-18 06:55  猴健居士  阅读(1726)  评论(0)    收藏  举报