设备筛选建议

更新:2007 年 11 月

本主题介绍如何为 ASP.NET 移动控件创建基于比较的筛选器和鉴别委托筛选器。设备筛选器提供了一种机制来创建命名的条件,您可以使用这些命名的条件来指定设备或移动设备的属性。这些筛选器存储在 Web.config 文件的 <deviceFilters> 节中。

每个设备筛选器和一种或多种类型的设备匹配,单个设备可以匹配多个筛选器。例如,Pocket PC 作为彩色设备与筛选器 IsColor 匹配,作为 PDA 与 IsPDA 匹配,作为基于 HTML 的浏览器与 IsHTML32 匹配。

对于每个筛选器,请在 Web.config 文件的 <deviceFilters> 节中添加 <filter> 元素。

您可以指定基于比较的筛选器和基于鉴别委托的筛选器。

基于比较的筛选器

基于比较的筛选器将 MobileCapabilities 属性值和一个参数进行比较。比较筛选器的语法如下所示:

<filter
    name="nameofFilter"
    compare="propertyName"
    argument="filterargument" />

在基于比较的筛选器中,<filter> 元素具有三个属性:

  • name 属性,它是筛选器的名称。

  • compare 属性 (Attribute),它包含筛选器计算的属性 (Property)。

  • argument 属性,它是与 propertyName值进行比较的参数。如果未提供任何参数,则将 null 用于比较。

在下面的示例中,如果 PreferredRenderingType 值为 wml11,则筛选器匹配。

<filter
    name="isWML11"
    compare="PreferredRenderingType"
    argument="wml11" />

如果筛选器用于 <Choice> 元素中并且筛选器中实现了匹配,则 ASP.NET 选择特定于设备的内容,该内容包含在 <Choice> 元素内的模板中。

基于鉴别委托的筛选器

基于鉴别委托的筛选器从自定义方法返回 true 或 false。该方法在 MobileCapabilities 类中的所有属性上计算返回的值。返回的值用于确定筛选器是否匹配。

基于鉴别委托的筛选器的语法如下所示:

<filter
    name="nameOfFilter"
    type="className"
    method="methodName" />

在基于鉴别委托的筛选器中,有三个属性:

  • name 属性,它是筛选器的名称。

  • type 属性,它是提供鉴别委托的类类型。名称必须是完全限定的。ASP.NET 在指定的程序集中搜索该类型。

  • method 属性,它是 Type 类上的方法的名称。此方法返回一个布尔值,指示根据传递给当前设备的 MobileCapabilities 实例,当前设备是否满足此筛选器。

在下面的示例中,如果 IsGPSEnabled 方法返回 true,则筛选器匹配。

<filter
    name="GPSEnabled"
    type="MyApplication.MyCapabilityEvaluators,MyAssembly"
    method="IsGPSEnabled"/>

下面的示例是 IsGPSEnabled 方法的主干声明。

namespace MyApplication
{
    public class MyCapabilityEvaluators
    {
        public static bool IsGPSEnabled(
            System.Web.Mobile.MobileCapabilities capabilities,
            String unusedArg)
        {
            // Any necessary proccessing goes here.
        }
    }
}

请通过向 Web.config 文件的 <deviceFilters> 节添加一行来为筛选器添加支持。例如,如果将上一个筛选器编译到名为 MyApplication.dll 的程序集中,请将下面一行添加到 Web.config 文件:

<filter name="IsGPSEnabled"
   type="MyApplication.MyCapabilityEvaluators,MyApplication"
   method="IsGPSEnabled" />

请参见

概念

扩展的浏览器功能

特定于设备的呈现

参考

<filter> 元素