ASP.NET 2.0移动开发之定义设备筛选器(2)
第二类设备筛选器称为基于鉴别委托的筛选器。当需要比基于比较的筛选器更为复杂的设备筛选功能时,可以通过提供方法的类名称和方法名称,指定基于鉴别委托的筛选器。在运行时,调用提供的方法来确定设备筛选器的计算结果是否为true。该筛选器的属性为:
现在我们来定义一个基于鉴别委托的筛选器,首先我们需要创建一个类库项目,编写和该筛选器相关的类及方法,经过编译后,再在ASP.NET Web移动应用程序中引用包含该类的程序集,具体的实现将在后面用实例进行详细的介绍。下面是类中的静态方法的具体形式(第二个参数是可选的,你可以将该参数作为额外的输入信息添加到上面的静态方法中):
在Web.Config配置文件中,你可以采用<filter>元素的第二种形式定义基于鉴别委托的筛选器。例如,你创建了一个名为isMMEonSony的筛选器,该筛选器使用了MyClass类中的一个名为MMEandSony的静态方法,而且该类的命名空间是MyEvaluators.dll程序集里的MyNameSpace。因此我们需要在移动Web.Config配置文件中编写如下的代码:
在上述配置中我们设置type属性为该类的完整名称:命名空间.类名,程序集。而method属性的属性值为运行时调用的实际的方法名。
在DeviceSpecific/Choice构造中使用一个基于鉴别委托的筛选器和在DeviceSpecific/Choice构造中使用一个基于比较的筛选器没有什么太大的区别,下面是使用基于鉴别委托的筛选器的代码片断:
除了上面的方法外,你还可以在代码中使用MobileCapabilities.HasCapability方法来查看移动设备是否具备isMMEonSony基于鉴别委托的筛选器的功能,如果设备具有指定的功能,则返回值为true,否则为false。在基于鉴别委托的筛选器这种情形下,HasCapability方法的第二个参数是可选的,你可以为该参数设置一个有意义的String值。
使用第二个参数的好处就是你可以传递一些MobileCapabilities对象无法获取的移动设备信息到HasCapability方法中,例如我们知道HTTP文件头会传送一些和移动设备相关的信息,我们可以使用System.Web.HttpRequest对象的属性获取移动设备的一些由MobileCapabilities对象无法获取的其它信息。下面是具体的实现代码:
http://hi.baidu.com/zhiwei%5F117/blog/item/4dde7d2ba11a7e27d42af113.html
属性 | 说明 |
name | 筛选器的名称 |
type | 它是提供鉴别委托的类类型。名称必须符合指定完全限定类型名的Microsoft .NET标准。ASP.NET在指定的程序集中搜索该类型。 |
method | 它是类type上方法的名称,该方法根据传递给它的MobileCapabilities实例返回一个布尔值指示当前的设备是否满足此筛选器。 |
现在我们来定义一个基于鉴别委托的筛选器,首先我们需要创建一个类库项目,编写和该筛选器相关的类及方法,经过编译后,再在ASP.NET Web移动应用程序中引用包含该类的程序集,具体的实现将在后面用实例进行详细的介绍。下面是类中的静态方法的具体形式(第二个参数是可选的,你可以将该参数作为额外的输入信息添加到上面的静态方法中):
+展开
-C#
public static bool MethodName
(System.Web.Mobile.MobileCapabilities capabilities, String param)
(System.Web.Mobile.MobileCapabilities capabilities, String param)
在Web.Config配置文件中,你可以采用<filter>元素的第二种形式定义基于鉴别委托的筛选器。例如,你创建了一个名为isMMEonSony的筛选器,该筛选器使用了MyClass类中的一个名为MMEandSony的静态方法,而且该类的命名空间是MyEvaluators.dll程序集里的MyNameSpace。因此我们需要在移动Web.Config配置文件中编写如下的代码:
+展开
-XML
<system.web>
<deviceFilters>
<filter name="isMMEonSony"
type="MyNameSpace.MyClass, MyEvaluators.dll"
method="MMEandSony">
</filter>
</deviceFilters>
</system.web>
<deviceFilters>
<filter name="isMMEonSony"
type="MyNameSpace.MyClass, MyEvaluators.dll"
method="MMEandSony">
</filter>
</deviceFilters>
</system.web>
在上述配置中我们设置type属性为该类的完整名称:命名空间.类名,程序集。而method属性的属性值为运行时调用的实际的方法名。
在DeviceSpecific/Choice构造中使用一个基于鉴别委托的筛选器和在DeviceSpecific/Choice构造中使用一个基于比较的筛选器没有什么太大的区别,下面是使用基于鉴别委托的筛选器的代码片断:
+展开
-XML
<mobile:Form id="Form1" runat="server">
<mobile:Label id="Label1" runat="server" Text="Client is NOT MME on Sony">
<DeviceSpecific>
<Choice Text="Client is MME on Sony" Filter="isMMEonSony">
</Choice>
</DeviceSpecific>
</mobile:Label>
</mobile:Form>
<mobile:Label id="Label1" runat="server" Text="Client is NOT MME on Sony">
<DeviceSpecific>
<Choice Text="Client is MME on Sony" Filter="isMMEonSony">
</Choice>
</DeviceSpecific>
</mobile:Label>
</mobile:Form>
除了上面的方法外,你还可以在代码中使用MobileCapabilities.HasCapability方法来查看移动设备是否具备isMMEonSony基于鉴别委托的筛选器的功能,如果设备具有指定的功能,则返回值为true,否则为false。在基于鉴别委托的筛选器这种情形下,HasCapability方法的第二个参数是可选的,你可以为该参数设置一个有意义的String值。
使用第二个参数的好处就是你可以传递一些MobileCapabilities对象无法获取的移动设备信息到HasCapability方法中,例如我们知道HTTP文件头会传送一些和移动设备相关的信息,我们可以使用System.Web.HttpRequest对象的属性获取移动设备的一些由MobileCapabilities对象无法获取的其它信息。下面是具体的实现代码:
+展开
-C#
if (((MobileCapabilities)Request.Browser).HasCapability(
"isMMEonSony",
Request.UserLanguages[0]))
{
// Do something.
}
"isMMEonSony",
Request.UserLanguages[0]))
{
// Do something.
}
http://hi.baidu.com/zhiwei%5F117/blog/item/4dde7d2ba11a7e27d42af113.html
加支付宝好友偷能量挖...