科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件ASP.NET 2.0移动开发之设备筛选器的应用

ASP.NET 2.0移动开发之设备筛选器的应用

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

我们可以直接采用一种便捷的、可视化的方式去定义DeviceSpecific/Choice构造和设备筛选器,避免了在程序中采用手动编码这样繁杂的实现过程

作者:轩辕南宫 来源:天极开发 2007年11月6日

关键字: Windows

  • 评论
  • 分享微博
  • 分享邮件
为控件应用设备筛选器

  在"已应用的设备筛选器"对话框中,选择将要给一个控件应用的设备筛选器,并点击"添加到列表"按钮将这个可用的设备筛选器添加到"已应用的设备筛选器"列表框中。而后你还可以点击该对话框上的上下箭头来调整这些设备筛选器的位置。名为(Default)的设备筛选器是默认的选择,所有它返回的总是true值。因此,(Default)设备筛选器的次序必须位于所有设备筛选器的下方(也就是"已应用的设备筛选器"列表框的最底端位置)。具体的情形如下图所示:

  

  该图显示的是为一个label控件应用四个设备筛选器,相应地你应该知道这种情形下由Visual Studio 2005自动生成的DeviceSpecific/Choice构造代码如下:

<mobile:Form id="Form1" runat="server">
<mobile:Label ID="Label1" Runat="server">
<DeviceSpecific>
<Choice Filter="isPocketIE" />
<Choice Filter="isHTML32" />
<Choice Filter="isCHTML10" />
<Choice />
</DeviceSpecific>
</mobile:Label>
</mobile:Form>

  也就是说四个设备筛选器的次序也就是DeviceSpecific/Choice构造中的<Choice>元素的相应次序。

  属性重写详解

<DeviceSpecific> 和<Choice>元素

  所有继承自System.Web.UI.MobileControl的ASP.NET移动服务器控件,在其代码声明中都可以包含一个<DeviceSpecific>元素。我在前面提及过,一个<DeviceSpecific>元素可以包含任意个<Choice>元素。一般来说,<Choice>元素的语法如下:

<Choice
Filter="filterName"
xmlns="urlToSchema"
<!-属性重写选项--!>

<!-模板化选项--!>
</Choice>

  下表是<Choice>常用的一些属性和子元素。

属性/子元素 说明
Filter 对照前面的<Choice>元素的语法,FilterName必须为一个可用的、在站点Web.Config文件<deviceFilters>节点处定义的设备筛选器的名称。注意,设备筛选器的名称是大小写敏感的,isHTML32和ishtml32是两个不同是设备筛选器。如果你在<Choice>元素中没有定义Filter属性,那么在<Choice>元素就将成为默认的选择,为此<Choice/>在设备筛选器列表中的排列位置是最后的。
Property overrides 你可用在DeviceSpecific/Choice构造中为控件的属性设置值。也就是说你可以在每个<Choice>元素中为控件对应不同的设备筛选器设置不同的属性值。例如我们在前面的示例中设置了四个设备筛选器(其中一个是默认的),如果你在<Choice>元素中为每个设备筛选器都设置了不同的label控件的Text属性。那么当某个设备筛选器返回true值的话,那么在该设备筛选器对应Text属性文本值就会重写其他设备筛选器中的Texe属性文本值。
xmlns 该属性一般是不用开发人员来指定的,Visual Studio 2005会自动检测模板中使用的是什么标记语言,而后Visual Studio 2005就会将该属性插入到相应的<Choice>元素中。所以站点无需直接对该属性进行操作,你也没有必要为该属性赋值。
Template elements 使用这个属性指定一些模板化的控件-例如Form、Panel、List和ObjectList控件,它允许页面在呈现时将你定义的内容整合到这些控件中。

  你可以在<DeviceSpecific>元素中使用一个不指定Filter属性的<Choice>元素, 这就是我上面所说的默认的<Choice>元素。你也可以不定义这样一个默认的<Choice>元素,但是一旦你定义的话,就一定要将该默认的元素放置在整个<Choice>元素列表的最末端。这是因为ASP.NET是按顺序来鉴别<Choice>元素的,当某个特定的设备请求移动Web页面时,将会应用第一个返回true的<Choice>元素。而默认的<Choice>元素总是返回true值,所以放置到整个元素列表最前面的话就将导致其他的<Choice>元素失效。

  列表列举了使用<Choice>元素的不同方法,在本示例中使用它来进行属性重写和定义<HeaderTemplate>和<FooterTemplate>(这些都是Form控件中常用的模板)。

<%@ Page Inherits="System.Web.UI.MobileControls.MobilePage"
Language="C#" %>
<%@ Register TagPrefix="mobile"
Namespace="System.Web.UI.MobileControls"
Assembly="System.Web.Mobile" %>

<mobile:Form runat="server">
<DeviceSpecific>
<Choice Filter="isHTML32">
<!-当设备支持HTML 3.2标记语言时,使用两个模板构建页面,且在页眉模板中使用图片--!>
<HeaderTemplate>
<table width="100%" height="100%" cellspacing="1">
<tr><td bgcolor="#003366">
<img src="sportsextra.gif">
</td></tr>
<tr><td bgcolor="#cccccc" valign="top" height="100%">
</HeaderTemplate>
<FooterTemplate>
</td></tr>
<tr><td bgcolor="#003366" height="4"></td></tr>
</table>
</FooterTemplate>
</Choice>
<Choice>
<!-默认的元素。当设备不支持HTML 3.2标记语言时,只在页眉模板
中使用SPORTS EXTRA!文本--!>
<HeaderTemplate>
<mobile:Label runat="server" StyleReference="title"
Text="SPORTS EXTRA!" />
</HeaderTemplate>
</Choice>
</DeviceSpecific>
<mobile:Label runat="server" Font-Size="Small" Font-Name="Arial">
Welcome to our mobile Sports Extra Web site.
Check here for up-to-the minute sports news as it happens!
<DeviceSpecific>
<Choice Filter="isWML11" Text="Welcome to LIVE results!"/>
<!-当设备支持WML 1.1标记语言时,Label控件的Text属性值为"Welcome to
LIVE results!"--!>
<Choice Filter="isCHTML10"
ForeColor="Red"
Text="Welcome to LIVE results!">
<!-当设备支持的是CHTML 1.0标记语言时,Label控件的Text属性值依然为
"Welcome to LIVE results!",但是字体的颜色是红色--!>
</Choice>
</DeviceSpecific>
</mobile:Label>
</mobile:Form>

  下面是站点程序的Web.Config文件中定义的设备筛选器:

<configuration>
<system.web>
<deviceFilters>
<filter name="isHTML32"
compare="PreferredRenderingType" argument="html32" />
<filter name="isWML11"
compare="PreferredRenderingType" argument="wml11" />
<filter name="isCHTML10"
compare="PreferredRenderingType" argument="chtml10" />
</deviceFilters>
</system.web>
</configuration>

  Form控件中包含一个<DeviceSpecific>元素,如果客户端设备支持HTML 3.2,那么就会在Form控件中插入一个HeaderTemplate(页眉模板)和一个FooterTemplate(页脚模板),并且这两个模板中的HTML标记合起来就使得该页面形成一个表格布局。在这个表格中我们使用了<img>HTML标签将一幅图片填充到表格的第一行。

  对位于Form控件中的DeviceSpecific/Choice构造的第二个<Choice>元素,并不存在Filter属性,所以它就是默认的<Choice>元素。如果对当前的请求isHTML32设备筛选器返回的是false值,那么程序将使用仅包含一个Label控件的<HeaderTemplate>来呈现页面。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章