WML 适配器集

更新:2007 年 11 月

WML 适配器集由一些类组成,这些类可用于在支持 WML 1.1 版或 WML 1.2 版的客户端上呈现 ASP.NET 移动网页。某些方法和属性可能不包括在此文档中。下表列出了 WML 适配器集中包括的核心类。

WML 设备的适配器集

核心适配器类命名空间

ControlAdapter 抽象基类

WmlControlAdapter

HtmlFormAdapter

WmlFormAdapter

PageAdapter 抽象类

WmlPageAdapter

MobileTextWriter

WmlMobileTextWriter

Openwave Up.Browser 使用不同的页适配器和文本编写器。下表列出了支持这些浏览器的适配器集所使用的核心类。

UP.Browser 的适配器集

核心适配器类命名空间

ControlAdapter 抽象基类

WmlControlAdapter

HtmlFormAdapter

WmlFormAdapter

PageAdapter 抽象类

UpWmlPageAdapter

MobileTextWriter

UpWmlMobileTextWriter

说明:

在 UP.Browser 4.1 或 UP.Browser 3.2 中,Redirect 方法的行为始终与 HttpBrowserCapabilities 对象的 SupportsRedirectWithCookie 属性值为 false 时相同,除非 Web.config 的 SessionState 节中的 Cookieless 属性已被显式地设置为 true。

在 ASP.NET 1.1 中,此设置的选项为 true 或 false,但在 ASP.NET 2.0 中,选项得到了扩展,AutoDetect 现在是默认设置。如果您的 Web 应用程序将 Web.config 中 <sessionState> 节的 cookieless 属性设置为布尔值,则 Redirect 方法将按预期方式作用于这些浏览器。

选项

如果 MobileCapabilities 类的 PreferredRenderingType 属性返回 PreferredRenderingTypeWml11PreferredRenderingTypeWml12,则选择 WML 适配器集。

适应性呈现

WML 适配器集能够完全适应基于 WML 的移动电话的各种功能。因此,适配器集实际上为每个窗体及其子控件调用两次 Render 方法。在第一次调用中,编写器处于分析模式,并使用对它进行的所有调用来分析窗体输出。在第二次调用中,实际呈现窗体。

避免创建在各次调用之间不同的适配器。如果确实必要,可编写一个能够通过检查 WmlMobileTextWriter 类的 AnalyzeMode 属性来访问当前模式的适配器。

默认呈现

下面的步骤显示了 WML 适配器集内的页和窗体适配器类的默认呈现。

页适配器执行以下步骤:

  1. 调用编写器的 BeginResponseBeginFile 方法。内容类型为 text/vnd.wap.wml。

  2. 写出一个开始 <wml> 标记。

  3. 呈现活动窗体。

  4. 如果可能,将链接的窗体呈现为同一个 WML 卡片组的一部分。

  5. 写出一个结束 </wml> 标记。

  6. 调用 EndFileEndResponse 方法。

窗体适配器执行以下步骤:

  1. 将编写器设置为分析模式。

  2. 调用编写器的 BeginForm 方法。

  3. 呈现窗体内容。结果不发送到设备,而是由编写器进行分析。

  4. 调用编写器的 EndForm 方法。

  5. 将编写器设置为活模式。

  6. 调用编写器的 BeginForm 方法。

  7. 呈现窗体内容。

  8. 调用编写器的 EndForm 方法。

使用样式

WmlMobileTextWriter 类提供了若干帮助器方法,可帮助您使用样式信息来呈现内容:

  • EnterLayoutExitLayout 方法使适配器可以使用给定样式的段落格式发出块的开始和结束标记。

  • EnterFormatExitFormat 方法使适配器可以使用给定样式的字符格式发出块的开始和结束标记。

  • ResetFormattingState 方法使适配器可以将格式状态重置为默认状态。

适应性呈现方法

WmlMobileTextWriter 类提供了若干高级呈现方法,如下表所示。

WML 适配器必须使用这些方法来呈现内容,因为编写器会根据目标设备的功能以最佳方式自动调整输出。

有关上述每种方法的详细信息,请参见 WmlMobileTextWriter 类的文档。

编写器方法

说明

RenderText

呈现文本元素。

RenderImage

呈现图像元素。

RenderTextBox

呈现文本输入框元素。

RenderEndHyperlink

呈现超链接元素。

调用 RenderTextRenderImage 方法以呈现超链接中的文本或图像。

RenderBeginPostBack

RenderEndPostBack

呈现回发元素。

调用 RenderTextRenderImage 方法以呈现回发中的文本或图像。

RenderBeginSelect

RenderEndSelect

RenderSelectOption

呈现选择列表元素。

调用 RenderSelectOption 方法以呈现选择列表中的每个选项。

AddFormVariable

添加要在窗体中呈现的一个变量和一个初始值。当某个 WML 设备呈现该窗体时,它会将该变量初始化为指定的初始值。

此外,WmlControlAdapter 基类也提供了若干高级方法,如下表所示。其中每一种方法都使用前面所列出的编写器方法来呈现。

适配器方法

说明

RenderBeginLink

RenderEndLink

呈现一个链接。适配器自动确定如何呈现该链接,它将同一页上的窗体链接呈现为回发,将其他链接呈现为超链接。

对编写器调用 RenderTextRenderImage 方法以呈现链接中的文本或图像。

RenderLink

呈现带内部文本的链接。

RenderPostBackEvent

以控件为目标呈现回发事件。

呈现菜单

在某些基于 WML 的设备上,使用 <select> 和 <option> 元素以及自动生成的键盘导航用户界面 (UI),可以通过项目菜单的形式更好地呈现由多个链接或定位点组成的窗体。Openwave UP.Browser 就属于这种设备。

如果窗体不包括控件或包括多个呈现为静态文本的控件,并且后跟一个或多个可呈现 <select> 和 <option> 元素的控件,则 WML 窗体适配器可将该窗体呈现为菜单。

如果 MobileCapabilities 类的 RendersWmlSelectsAsMenuCards 属性设置为 true,则设备可将 <select> 元素呈现为菜单卡而不是组合框。

如果浏览器可将包含多个窗体的卡片组按单独的卡片处理,则 CanCombineFormsInDeck 属性设置为 true。适配器可将同一页中的多个窗体作为一个卡片组中的卡片输出。

呈现窗体接受控件

如果呈现的窗体包括用于将窗体提交回服务器的用户界面,则某些基于 WML 的设备要求指定设备的用户界面为窗体开始处的 <do> 元素。Openwave UP.Browser 就属于这种设备。

如果设备要求用户界面使用 <do> 元素,则窗体适配器将检查窗体上是否有控件需要使用提交用户界面,以及是否有控件提供了这样的用户界面。为确定这一点,窗体适配器将查询窗体上每个控件的适配器。

软键呈现

某些控件呈现可映射到基于 WML 的设备上的软键的用户界面。如果设备将 WML <do> 元素呈现为内联按钮而不是软键,则 MobileCapabilities 类的 RendersWmlDoAcceptsInline 属性设置为 true。

辅助用户界面

WML 适配器集支持辅助用户界面,控件使用该界面来显示用户界面的附加屏幕。若要使用辅助用户界面,控件适配器要执行以下步骤:

  1. 在响应某些用户交互(通常在可重写的 HandlePostBackEvent 方法中)时,控件适配器通过设置 WmlControlAdapter 基类的 SecondaryUIMode 属性,指定辅助用户界面模式。

  2. 在呈现时,控件检查它是否处于辅助用户界面模式;如果是,则呈现适当的辅助用户界面。

  3. 在响应辅助用户界面中的用户交互时,控件适配器可能会将辅助用户界面模式更改为其他值,或者可能通过调用 WmlControlAdapter 基类的 ExitSecondaryUIMode 方法退出辅助用户界面模式。

其他功能

WML 设备公开了可用于改变呈现的其他功能。这些功能可通过 MobileCapabilities 类的 HasCapability 方法访问。

请参见

概念

适配器集功能

参考

设备功能表