特定于设备的呈现
更新:2007 年 11 月
虽然 ASP.NET 移动网页可以自动呈现到各种设备,但是它们还向您提供了多种方法用于指定特定于设备或设备类的内容。这意味着移动网页允许您自定义页以利用设备的特定功能。例如,公共要求是在不同的设备上以不同的方式呈现项。ASP.NET 使用适于在各种设备类型上呈现的大量隐式格式。然而,如果需要,可以使 ASP.NET 呈现一个标签,该标签在一台设备上使用一个字符串,而在另一台设备上使用不同的字符串。
为应对这种情况,请在应用程序中加入根据设备功能查询结果设置控件属性的代码。若要为特定类型的设备自定义移动网页,请为该页定义一组设备筛选器,然后使用 <DeviceSpecific><Choice> 构造为每种类型的设备指定筛选器。
说明: |
---|
默认的 Visual Studio 移动配置文件包含各种预定义的设备筛选器。默认情况下,ASP.NET 2.0 不自动生成移动设备筛选器。然而,如果您将 Web 应用程序从 ASP.NET 的以前版本迁移到 ASP.NET 2.0 版,您的设备筛选器将保留在 Web.config 文件中。 |
使用 Filter 属性
Filter 属性用于根据设备功能鉴别设备筛选器,或设置特定的筛选器。
筛选器的名称必须是页或关联的 .ascx 文件上方法的名称,或是 Web.config 文件的 <deviceFilters> 元素中定义的有效设备筛选器的名称。如果使用 Filter 属性指定方法名称,则该方法必须符合以下原型:
public bool methodName(
System.Web.Mobile.MobileCapabilities capabilities,
String optionalArgument);
例如,如果将 Filter 属性设置为 myChoiceMethod,则必须存在具有如下签名的方法。
public bool myChoiceMethod(
System.Web.Mobile.MobileCapabilities capabilities,
String optionalArgument
);
当 ASP.NET 计算 Choice 元素时,它检查页或用户控件中是否存在适当的签名方法。如果不存在,则 ASP.NET 检查 Web.config 文件的 <deviceFilters> 元素。
使用设备筛选器扩展 MobileCapabilities 类
通过将您自己的设备筛选器添加到 Web.config 文件,可以扩展 MobileCapabilities 类。配置设备筛选器为两种类型的筛选器提供计算机制:基于比较的筛选器和基于鉴别委托的筛选器。
基于比较的筛选器
基于比较的筛选器通常基于布尔型参数进行基本的比较。对于这种类型的筛选器,您提供需要该筛选器进行比较的功能的名称和值。在运行时,如果功能值和您提供的值相等,则计算器成功。被比较的布尔型属性是不区分大小写的,因此 true 和 True 是等效的。其他被比较的属性是区分大小写的。
基于鉴别委托的筛选器
对于更复杂计算,您可以通过提供方法的类和方法名指定基于鉴别委托的筛选器。在运行时,将调用您提供的方法来测试计算器。您必须编写并编译自己的方法来测试计算器。或者,您可以在页或用户控件中定义方法,然后从 filter 属性直接引用它,如前面所述。
Web.config 文件语法
在 Web.config 文件中指定设备筛选器时,请将它们添加到 <system.web> 节。若要查看语法,请参见 <deviceFilters>。语法适用于这两种筛选器类型。在下面的示例中,第一种筛选器表示基于比较的筛选器,第二种筛选器表示基于鉴别委托的筛选器:
<system.web>
<deviceFilters>
<filter
name="capability"
compare="capabilityName"
argument="argument" />
<filter
name="capability"
type="className"
method="methodName" />
</deviceFilters>
</system.web>
MobileCapabilities 对象在运行时计算这些筛选器。每个设备筛选器都基于设备的功能指定一个计算条件。设备筛选器面向的设备集通常不是分立的,例如,许多设备可能同时符合 IsColor 和 IsPDA筛选器属性。
说明: |
---|
设备筛选器名称是区分大小写的。 |
在 <DeviceSpecific><Choice> 构造中,您为这些筛选器指定值。例如,以下代码访问 Web.config 文件中定义的 IsColor 筛选器属性。
<DeviceSpecific>
<Choice Filter="IsColor" ImageUrl="colorImg.gif" />
</DeviceSpecific>
使用 Device-Specific/Choice 构造
<DeviceSpecific><Choice> 构造是在页中插入特定于设备的标记的核心构造。若要为控件添加特定于设备的标记,您可以添加 <DeviceSpecific> 元素作为控件的子级。一个控件只能包含一个 <DeviceSpecific> 元素。
<DeviceSpecific> 元素和 <Choice> 元素使您能够指定一组值,ASP.NET 根据请求设备的特性从这组值中进行选择。选项的值是字符串。
<DeviceSpecific> 元素是一个用于保存多个选项的外部容器,如下面的示例所示:
<mobile:Image runat=server ImageURL="bw.gif">
<DeviceSpecific>
<Choice Filter="isColor" ImageURL="colorImg.gif"
AlternateText="This device cannot display the image." />
<Choice Filter="isWML11" ImageURL="myImage.wbmp" />
<Choice ImageURL="monoImage.gif" />
</DeviceSpecific>
</mobile:Image>
筛选器(例如 isColor)必须在 Web.config 文件中具有对应的项,或作为方法存在于页或用户控件上,如前面所述。
使用 Choice 元素
选项放置在 <DeviceSpecific> 元素中,表示设备特性/值对,其中设备特性是从多个源获取的。选项的计算顺序是它们在 DeviceSpecific/Choice 构造中的显示顺序。
虽然一个控件只能包含一个 <DeviceSpecific> 元素,但您可以在 <DeviceSpecific> 元素中添加任意数目的 <Choice> 元素。每个 <Choice> 元素都可以包含以下内容:
筛选器名称,指定要计算的设备筛选器。如果省略筛选器名称,则在默认情况下将选择选项。
重写父控件属性的附加属性。
控件的模板定义。
ASP.NET 通过按顺序检查每个选项并计算筛选器名称所指定的筛选器,来选择要使用的 <Choice> 元素。如果筛选器符合当前的目标设备(即计算为 true),则选择该选项。然后,控件应用该选项中指定的任何属性重写,并可以使用呈现中定义的任何模板。