使用特定于设备的模板

更新:2007 年 11 月

混合使用特定于设备的标记与 ASP.NET 移动控件时,必须根据移动控件呈现的内容来确保一致性。混合使用特定于设备的标记和与设备无关的标记时,不支持智能检测和匹配。

错误混合的示例

在下面这个错误的示例中,如果筛选器与设备功能匹配,则 <ContentTemplate> 元素的内容将发送到设备。注意第一个 Panel 控件和 Label 控件的 alignment 属性。由于 Label 控件位于 WML <td> 元素内,浏览器将错误地呈现为 Label 控件生成的 <p> 元素,因为它位于 <td> 标记内。

<mobile:panel runat="server" alignment="right">
  <DeviceSpecific>
    <Choice Filter="isWML11">
      <ContentTemplate>
        <table columns="2" align="LR">
        <tr>
          <td>
            </ContentTemplate>
           </Choice>
           </Devicespecific>
           </mobile:panel>
    <mobile:label id="label1" runat="server" text="HELLO HOW ARE YOU" alignment="left" />
    <mobile:panel runat="server">
         <DeviceSpecific>
           <Choice Filter="isWML11">
            <ContentTemplate>
              </td>
          <td>
         </ContentTemplate>
        </Choice>
  </Devicespecific>
</mobile:panel>

在您为 alignment 设置了非默认设置之后,将为创建的每个控件呈现 <p> 元素。产生以下错误:

Digest Compile failed.
WML_1.1.DTD(9) : error: Close tag 'p' does not match start tag 'td'
WML_1.1.DTD(9) : error: Invalid element 'p' in content of 'tr'. 
    Expected td
WML_1.1.DTD(9) : error: Invalid element 'p' in content of 'tr'.   
    Expected td
WML_1.1.DTD(10) : error: Close tag 'td' does not match start tag 'p'

这种情况下,由于 Label 控件不从第一个 Panel 控件继承对齐方式,因此它为自己的对齐方式生成一个 <p> 元素。但是,此情况下不能添加 <p> 元素。这种情况并不常见,通过以下方法可解决此问题:将 Label 控件标记为仅当不在基于 WML 的设备上呈现时可见,并在模板中指定 Label 控件的文本。使用 Panel 控件中的 <table align="left"> 标记进行 WML 呈现。

说明:

可以控制表的整体对齐方式,无法控制个别单元格的对齐方式。

纠正后的示例

下面的示例纠正了前面的错误,并包含了另外一些内容,如页指令和窗体控件。

<%@ Page Inherits="System.Web.UI.MobileControls.MobilePage" Language ="c#" %>
<Mobile:Form runat=server ID="OrderForm" Title="Submit your Order For pizza">
    <Mobile:link runat=server ID="LinkWN1" Text="What's On" Alignment="center">
</Mobile:link>
   <mobile:Panel runat=server>
      <DeviceSpecific>
         <Choice Filter="isWML11">
            <ContentTemplate>
              <table columns="2" 
                 align="LR">
<tr><td>
             </ContentTemplate>
         </Choice>
      </Devicespecific>
   </mobile:panel>
   <Mobile:Label id="label1" runat=server 
      Text="HELLO HOW ARE YOU">
   </Mobile:Label>
   <mobile:Panel runat=server>
      <DeviceSpecific>
         <Choice Filter="isWML11">
            <ContentTemplate>
</td><td>
            </ContentTemplate>
         </Choice>
     </Devicespecific>
   </mobile:panel>
   <mobile:Panel runat=server>
      <DeviceSpecific>
         <Choice Filter="isWML11">
            <ContentTemplate>
</td></tr>
              </table>
            </ContentTemplate>
         </Choice>
      </Devicespecific>
</mobile:panel>
</Mobile:Form>

<Mobile:Form runat=server ID="WhatisOn" Title="Contains">
<Mobile:Label StyleReference="Title" ID="LblWO2" runat=server Text="Toppings"></Mobile:Label>
</Mobile:Form>

请参见

概念

移动控件的自定义属性

设备筛选建议

设备计算方法

扩展的浏览器功能

参考

HasCapability

MobileControl