本主题是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", "");

    返回的是一个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>

deviceFilters与设备过滤的更多相关文章

  1. 第18.2节_地址类型与LL层设备过滤

    一.地址类型 二.白名单和Resolving List 三.LL层设备过滤 一.地址类型 学习资料:官方手册 Vol 6: Core System Package [Low Energy Contro ...

  2. ---- 关于Android蓝牙搜索到设备的图标显示和设备过滤

    根据: https://www.douban.com/note/637446089/http://bbs.16rd.com/blog-23795-3446.html 以下摘自原文: (Android主 ...

  3. Minifilter微过滤框架:框架介绍以及驱动层和应用层的通讯

    minifilter是sfilter后微软推出的过滤驱动框架.相比于sfilter,他更容易使用,需要程序员做的编码更简洁. 系统为minifilter专门制作了一个过滤管理器,这个管理器本身其实是一 ...

  4. Android开发-API指南-<uses-feature>

    <uses-feature> 英文原文:http://developer.android.com/guide/topics/manifest/uses-feature-element.ht ...

  5. dos攻击

    概念理解 DoS到底是什么?接触PC机较早的同志会直接想到微软磁盘操作系统的DOS--DiskOperationSystem?不,此DoS非彼DOS也,DoS即DenialOfService,拒绝服务 ...

  6. GPS(1)核心API及3种列出LocationProvider的方法

    GPS的常用API Android SDK为GPS提供了很多API,其中LocationManager类是这些API的核心.所有与GPS相关的操作都由LocationManager对象及其派生的对象完 ...

  7. Gprinter Android SDK V1.0 使用说明

    佳博打印机代理商淘宝店https://shop107172033.taobao.com/index.htm?spm=2013.1.w5002-9520741823.2.Sqz8Pf 在此店购买的打印机 ...

  8. 【转】USB协议架构及驱动架构

    1. USB协议 1.1 USB主机系统 在USB主机系统中,通过根集线器与外部USB从机设备相连的处理芯片,称为USB主机控制器.USB主机控制器包含硬件.软件和固件一部分. 1.2 USB设备系统 ...

  9. Windows驱动开发入门指引

       1.  前言 因工作上项目的需要,笔者需要做驱动相关的开发,之前并没有接触过相关的知识,折腾一段时间下来,功能如需实现了,也积累了一些经验和看法,所以在此做番总结. 对于驱动开发的开发指引,微软 ...

随机推荐

  1. 浅析 Linux 初始化 init 系统

    近年来,Linux 系统的 init 进程经历了两次重大的演进,传统的 sysvinit 已经逐渐淡出历史舞台,新的 UpStart 和 systemd 各有特点,越来越多的 Linux 发行版采纳了 ...

  2. 基于腾讯手Q样式规范Frozen UI

    Frozen UI是一个开源的简单易用,轻量快捷的移动端UI框架.基于手Q样式规范,选取最常用的组件,做成公用离线包减少请求,升级方式友好,文档完善,目前全面应用在腾讯手Q增值业务中. css组件包括 ...

  3. ENode框架Conference案例分析系列之 - Quick Start

    前言 前一篇文章介绍了Conference案例的架构设计,本篇文章开始介绍Conference案例的代码实现.由于代码比较多,一开始就全部介绍所有细节,估计很多人接受不了,也理解不了.所以,我先进行一 ...

  4. 从Facebook跑来阿里的赵海平大叔,你要干啥?

    赵海平在今年三月份来到阿里,听毕玄(他现任主管)说去年五六月份就跟赵海平聊上了.有人问:为啥 BAT 三大巨头,你看中了阿里巴巴?在今天现场达一千多人的分享中赵海平给出了回复:“因为百度和腾讯没找我呗 ...

  5. C语言 · 查找整数

    问题描述 给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个. 输入格式 第一行包含一个整数n. 第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000. 第三行包含一个 ...

  6. Hystrix框架4--circuit

    circuit 在Hystrix调用服务时,难免会遇到异常,如对方服务不可用,在这种情况下如果仍然不停地调用就是不必要的,在Hystrix中可以配置使用circuit,当达到一定程度错误,就会自动调用 ...

  7. iOS----- Crash 分析(文三)- 符号化崩溃日志

    未符号化的崩溃日志就象一本天书,看不懂,更别谈分析崩溃原因了.所以我们在分析日志之前,要把日志翻译成我们可以看得懂的文字.这一步我们称之为符号化. 在iOS Crash分析(文一)中已经提到过符号化的 ...

  8. 在drawable 画胶囊状

    <solid android:color="@color/colorAccent"></solid> <corners android:radius= ...

  9. jsp中头的导入两种方式区别

    1.<jsp:include page="top.jsp">先将top.jsp中的java脚本和jsp指令执行完毕以后再讲top.jsp页面加入面中 2.<%@ ...

  10. VS-项目发布失败的解决方案1

    报错信息 错误 1 未能将文件 Script\easyui\themes\gray\images\Thumbs.db 复制到 obj\Release\Package\PackageTmp\Script ...