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", "");
返回的是一个bool值,表明是否具备该功能;
对于自定义的功能,只能通过HasCapability
((System.Web.Mobile.MobileCapabilities)System.Web.HttpContext.Current.Request.Browser).HasCapability("GPSEnabled", null);
HasCapability 方法使用两个参数:capabilityName,它是功能字典中设备计算方法、属性或项的名称;optionalArgument,它是 capabilityName参数需要的任何参数。 HasCapability 方法按照以下顺序执行其计算:
- 它检查 capabilityName 值是否是 Web.config 文件中指定的设备筛选器的名称。
注意 |
HasCapability 方法通过将 optionalArgument 参数设置为 null 来计算 <DeviceSpecific> 和 <Choice> 构造。 |
- 如果第 1 步中的测试返回 true 并且筛选器是委托计算器(使用自定义方法计算指定数据的筛选器),则 HasCapability 方法将使用optionalArgument 参数中提供的参数调用委托并返回结果。
- 如果第 1 步中的测试返回 true 并且筛选器是比较计算器(将功能名与某个指定的值进行比较的筛选器),则 HasCapability 方法将使用该功能名和计算器中提供的参数(忽略所有原始 optionalArgument 参数)调用其本身并返回结果。
- 如果 MobileCapabilities 对象具有名为 capabilityName 的属性,则 HasCapability 方法将此属性强制转换为字符串并在optionalArgument 值等于该字符串时返回 true。 布尔型比较不区分大小写;其他比较区分大小写。 因此,"true"等同于"True",但"left"不等于"Left"。
- 如果不存在任何 capabilityName 属性,则 HasCapability 方法将在与 MobileCapabilities 对象关联的功能字典中进行查找。 如果capabilityName 属性存在,则 HasCapability 方法将其与 optionalArgument 参数进行比较并返回结果。 因为字典可以维护字符串,所以无需进行强制转换。
- 如果这些测试失败,HasCapability 方法将引发 ArgumentOutOfRangeException 异常。
附表1
下表从适配器开发人员的角度列出了 ASP.NET 移动控件设备属性及有效的标记语言。 此表还列出对于应用程序逻辑中的常规使用有效、从而适用于所有标记语言的属性(通常不是呈现标记的属性)。
Property |
常规使用 |
HTML 和 XHTML |
cHTML |
WML |
是 |
是 |
是 |
是 |
|
否 |
否 |
否 |
是 |
|
是 |
是 |
是 |
是 |
|
是 |
是 |
是 |
是 |
|
否 |
否 |
否 |
是 |
|
否 |
否 |
否 |
是 |
|
否 |
否 |
否 |
是 |
|
否 |
否 |
否 |
是 |
|
否 |
否 |
否 |
是 |
|
是 |
是 |
是 |
是 |
|
是 |
是 |
是 |
是 |
|
是 |
是 |
是 |
是 |
|
是 |
是 |
是 |
是 |
|
是 |
是 |
是 |
是 |
|
否 |
否 |
否 |
是 |
|
否 |
是 |
是 |
否 |
|
是 |
是 |
是 |
是 |
|
是 |
是 |
是 |
是 |
|
是 |
是 |
是 |
是 |
|
是 |
是 |
是 |
是 |
|
否 |
否 |
是 |
是 |
|
否 |
否 |
否 |
是 |
|
是 |
是 |
是 |
是 |
|
是 |
是 |
是 |
是 |
|
是 |
是 |
是 |
是 |
|
是 |
是 |
是 |
是 |
|
是 |
是 |
是 |
是 |
|
是 |
是 |
是 |
是 |
|
否 |
否 |
否 |
是 |
|
否 |
是 |
是 |
否 |
|
否 |
否 |
否 |
是 |
|
否 |
否 |
否 |
是 |
|
否 |
否 |
否 |
是 |
|
否 |
否 |
否 |
是 |
|
否 |
是 |
是 |
否 |
|
否 |
是 |
是 |
否 |
|
否 |
是 |
是 |
否 |
|
否 |
是 |
是 |
是 |
|
否 |
是 |
是 |
是 |
|
否 |
是 |
是 |
是 |
|
否 |
否 |
是 |
否 |
|
否 |
否 |
否 |
是 |
|
否 |
否 |
否 |
是 |
|
否 |
是 |
是 |
是 |
|
否 |
否 |
是 |
否 |
|
是 |
是 |
是 |
是 |
|
否 |
否 |
否 |
是 |
|
是 |
是 |
是 |
是 |
|
是 |
是 |
是 |
是 |
|
是 |
是 |
是 |
是 |
|
是 |
是 |
是 |
是 |
|
是 |
是 |
是 |
是 |
|
否 |
是 |
是 |
否 |
|
否 |
是 |
是 |
否 |
|
否 |
是 |
是 |
否 |
|
否 |
否 |
否 |
是 |
|
是 |
是 |
是 |
是 |
|
否 |
是 |
是 |
否 |
|
否 |
是 |
是 |
否 |
|
否 |
是 |
是 |
否 |
|
否 |
是 |
是 |
否 |
|
否 |
是 |
是 |
否 |
|
否 |
是 |
是 |
否 |
|
否 |
否 |
是 |
否 |
|
否 |
否 |
是 |
否 |
|
否 |
否 |
是 |
否 |
|
否 |
是 |
是 |
否 |
|
否 |
是 |
是 |
否 |
|
否 |
否 |
是 |
否 |
|
否 |
是 |
是 |
是 |
|
否 |
否 |
是 |
否 |
|
是 |
是 |
是 |
是 |
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与设备过滤的更多相关文章
- 第18.2节_地址类型与LL层设备过滤
一.地址类型 二.白名单和Resolving List 三.LL层设备过滤 一.地址类型 学习资料:官方手册 Vol 6: Core System Package [Low Energy Contro ...
- ---- 关于Android蓝牙搜索到设备的图标显示和设备过滤
根据: https://www.douban.com/note/637446089/http://bbs.16rd.com/blog-23795-3446.html 以下摘自原文: (Android主 ...
- Minifilter微过滤框架:框架介绍以及驱动层和应用层的通讯
minifilter是sfilter后微软推出的过滤驱动框架.相比于sfilter,他更容易使用,需要程序员做的编码更简洁. 系统为minifilter专门制作了一个过滤管理器,这个管理器本身其实是一 ...
- Android开发-API指南-<uses-feature>
<uses-feature> 英文原文:http://developer.android.com/guide/topics/manifest/uses-feature-element.ht ...
- dos攻击
概念理解 DoS到底是什么?接触PC机较早的同志会直接想到微软磁盘操作系统的DOS--DiskOperationSystem?不,此DoS非彼DOS也,DoS即DenialOfService,拒绝服务 ...
- GPS(1)核心API及3种列出LocationProvider的方法
GPS的常用API Android SDK为GPS提供了很多API,其中LocationManager类是这些API的核心.所有与GPS相关的操作都由LocationManager对象及其派生的对象完 ...
- Gprinter Android SDK V1.0 使用说明
佳博打印机代理商淘宝店https://shop107172033.taobao.com/index.htm?spm=2013.1.w5002-9520741823.2.Sqz8Pf 在此店购买的打印机 ...
- 【转】USB协议架构及驱动架构
1. USB协议 1.1 USB主机系统 在USB主机系统中,通过根集线器与外部USB从机设备相连的处理芯片,称为USB主机控制器.USB主机控制器包含硬件.软件和固件一部分. 1.2 USB设备系统 ...
- Windows驱动开发入门指引
1. 前言 因工作上项目的需要,笔者需要做驱动相关的开发,之前并没有接触过相关的知识,折腾一段时间下来,功能如需实现了,也积累了一些经验和看法,所以在此做番总结. 对于驱动开发的开发指引,微软 ...
随机推荐
- PHP是怎么运行的
这篇文章,研究一下PHP代码是如何解释和执行以及PHP脚本运行的生命周期. 概述 PHP服务的启动.严格来说,PHP的相关进程是不需要手动启动的,它是随着Apache的启动而运行的.当然,如果有需要重 ...
- Some practices to write better C#/.NET code(译)
C#(.NET)中有关编码的一些建议,原文地址:http://www.codeproject.com/Articles/539179/Some-practices-to-write-better-Cs ...
- 在MotionBuilder中绑定C3D动作和模型
[题外话] 实验室人手不足,虽然自己连MotionBuilder一点都没有用过,但是老板叫自己干也只能硬着头皮上了.本文详细介绍了MotionBuilder 2013中的摄像机操作以及在MotionB ...
- 初试ASP.NET Web API/MVC API(附Demo)
写在前面 HTTP RESTful 创建Web API 调用Web API 运行截图及Demo下载 ASP.NET Web API是一个框架,可以很容易构建达成了广泛的HTTP服务客户端,包括浏览 ...
- iOS 之APP上架
前几天在忙着上线,尽管之前已经上线过一次,但由于本身比较菜,还是状况百出. 好在今天终于成功提交,因此来写写心得. 如果是第一次上线,推荐这篇文章: http://jingyan.baidu.com/ ...
- easyui相关script的配置
<!-- 1 jQuery的js包 --> <script type="text/javascript" src="jquery-easyui-1.4. ...
- C#设计模式系列:开闭原则(Open Close Principle)
1.开闭原则简介 开闭原则对扩展开放,对修改关闭,开闭原则是面向对象设计中可复用设计的基石. 2.开闭原则的实现 实现开闭原则的关键就在于抽象,把系统的所有可能的行为抽象成一个抽象底层,这个抽象底层规 ...
- 深入学习jQuery节点操作
× 目录 [1]创建节点 [2]插入节点 [3]删除节点[4]复制节点[5]替换节点[6]包裹节点 前面的话 DOM节点操作包括创建节点.插入节点.移除节点.替换节点和复制节点.jQuery也有类似的 ...
- .NET平台开源项目速览(5)深入使用与扩展SharpConfig组件
上个月在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧 和 .NET平台开源项目速览(1)SharpConfig配置文件读写组件 中都提到了SharpConfig组件,简单轻量级 ...
- 创建第二个 vlan network "vlan101" - 每天5分钟玩转 OpenStack(96)
前面我们创建了 vlan100,并部署了 instance,今天将继续创建第二个 vlan network "vlan101". subnet IP 地址为 172.16.101. ...