以编程方式计算功能

更新:2007 年 11 月

对于 ASP.NET 移动控件,可以使用 MobileCapabilities 类的 HasCapability 方法以编程的方式访问通过 Web.config 文件的 <deviceFilters> 节提供的功能。通过调用此方法,您可以计算比较方法。

HasCapability 方法可用于以编程方式确定当前设备是否满足 Web.config 文件中声明的设备筛选器。MobileCapabilities 实例缓存 HasCapability 方法的计算,以便无需重新计算随后对相同功能名和可选参数的请求。HasCapability 方法可用于编写特定的代码,这些代码与 ASP.NET 页框架在 <DeviceSpecific> 元素的多个选项中进行选择的方式匹配。

说明:

HasCapability 方法不支持 <DeviceSpecific> 元素选项,这些选项调用在页上定义的方法。

HasCapability 方法使用两个参数:capabilityName,它是功能字典中设备计算方法、属性或项的名称;optionalArgument,它是 capabilityName 参数需要的任何参数。HasCapability 方法按照以下顺序执行其计算:

  1. 它检查 capabilityName 值是否是 Web.config 文件中指定的设备筛选器的名称。

    说明:

    HasCapability 方法通过将 optionalArgument 参数设置为 null 来计算 <DeviceSpecific><Choice> 构造。

  2. 如果第 1 步中的测试返回 true 并且筛选器是委托计算器(使用自定义方法计算指定数据的筛选器),则 HasCapability 方法将使用 optionalArgument 参数中提供的参数调用委托并返回结果。

  3. 如果第 1 步中的测试返回 true 并且筛选器是比较计算器(将功能名与某个指定的值进行比较的筛选器),则 HasCapability 方法将使用该功能名和计算器中提供的参数(忽略所有原始 optionalArgument 参数)调用其本身并返回结果。

  4. 如果 MobileCapabilities 对象具有名为 capabilityName 的属性,则 HasCapability 方法将此属性强制转换为字符串并在 optionalArgument 值等于该字符串时返回 true。布尔型比较不区分大小写;其他比较区分大小写。因此,“true”等同于“True”,但“left”不等于“Left”。

  5. 如果不存在任何 capabilityName 属性,则 HasCapability 方法将在与 MobileCapabilities 对象关联的功能字典中进行查找。如果 capabilityName 属性存在,则 HasCapability 方法将其与 optionalArgument 参数进行比较并返回结果。因为字典可以维护字符串,所以无需进行强制转换。

  6. 如果这些测试失败,HasCapability 方法将引发 ArgumentOutOfRangeException 异常。

示例

下面的示例演示您将如何调用 HasCapability 方法,其中 GPSEnabled 和 ScreenBitDepth 是 Items 集合中定义的筛选器、属性或值。

((MobileCapabilities)Request.Browser).HasCapability("GPSEnabled", null);

或者,可以按如下所示调用该方法:

((MobileCapabilities)Request.Browser).HasCapability("ScreenBitDepth", "8");

请参见

概念

设备计算方法

设备筛选建议

特定于设备的呈现

参考

设备功能表

<filter> 元素