更新: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" />