以编程方式计算功能
更新: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 方法按照以下顺序执行其计算:
它检查 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 异常。
示例
下面的示例演示您将如何调用 HasCapability 方法,其中 GPSEnabled 和 ScreenBitDepth 是 Items 集合中定义的筛选器、属性或值。
((MobileCapabilities)Request.Browser).HasCapability("GPSEnabled", null);
或者,可以按如下所示调用该方法:
((MobileCapabilities)Request.Browser).HasCapability("ScreenBitDepth", "8");