控件和适配器交互

更新:2007 年 11 月

在 ASP.NET 移动控件及其关联的适配器的生命周期中发生两种类型的交互:控件和设备适配器之间的交互以及页和页适配器之间的交互。

控件和控件设备适配器

在移动控件的生命周期中,在控件及其关联的设备适配器之间发生以下交互:

  1. ASP.NET 先检查缓存中是否存在页的副本。如果存在,则将缓存的页发送到客户端。有关缓存的更多信息,请参见移动文本编写器呈现的最佳做法的“输出缓存”一节。

  2. 创建控件。当首次试图访问控件的 Adapter 属性时,将选择控件适配器并创建它的一个新实例,如适配器映射中的“了解设备适配器选择过程”一节所述。

    当创建新适配器时,将设置控件设备适配器的 Control

  3. 如果页进行了缓存,则该页将调用适配器以确定缓存是否需要通过任何附加头有所变化。

  4. 调用控件的 OnInit 方法。MobileControl 基类的实现调用控件设备适配器的 OnInit 方法。

  5. 如果存在控件的私有视图状态,则将加载该状态。如果设备适配器存储了控件的任何设备特定的状态,则 LoadPrivateViewState 方法的 MobileControl 基类实现将调用控件设备适配器的 LoadAdapterState 方法。

  6. 调用控件的 OnLoad 方法。MobileControl 基类的实现调用控件设备适配器的 OnLoad 方法。

  7. 如果控件实现 IPostBackEventHandler 接口并接收回发事件,则调用控件的 RaisePostBackEvent 方法。如果发送到控件的事件能够根据目标设备有所变化,则此方法的控件实现将调用控件设备适配器的 HandlePostBackEvent 方法。HandlePostBackEvent 方法返回 true 或 false,指示设备适配器是否已处理事件。

  8. 如果适用,保存控件的私有视图状态。如果适配器需要存储控件的任何设备特定的状态,则 SavePrivateViewState 方法的 MobileControl 基类实现将调用控件设备适配器的 SaveAdapterState 方法。

  9. 调用控件的 OnPreRender 方法。MobileControl 基类的实现调用控件设备适配器的 OnPreRender 方法。

  10. 调用控件的 Render 方法。MobileControl 基类的实现调用控件适配器的 Render 方法。

  11. 调用控件的 OnUnload 方法。MobileControl 基类的实现调用控件设备适配器的 OnUnload 方法。

页和页适配器

虽然 MobilePage 类从 .NET Framework Page 类(而不是 MobileControl 类)继承,但 MobilePage 类与适配器相关的行为非常类似于 MobileControl 类的行为。

ASP.NET 中的移动页适配器(例如 ChtmlPageAdapterHtmlPageAdapterWmlPageAdapterXhtmlPageAdapter)实现 IPageAdapter 接口(该接口本身实现 IControlAdapter 接口)。因此,页适配器的大部分生命周期类似于控件适配器的生命周期。移动页及其设备适配器的交互特定于 Page 类,并且在它们的生命周期中经历以下步骤:

  1. ASP.NET 创建一个页。当首次试图访问页的 Adapter 属性时,将选择页适配器并创建它的一个实例,如适配器映射中的“了解设备适配器选择过程”一节所述。当创建适配器时,将设置页适配器的 Page 属性。

  2. 调用页的 OnInit 方法。MobilePage 基类的实现调用页适配器的 OnInit 方法。

  3. 调用页的 OnDeviceCustomize 方法。MobilePage 基类的实现调用页适配器的 OnDeviceCustomize 方法。

  4. 若要确定页的回发模式(如果适用),则 MobilePage 基类将调用页适配器的 DeterminePostBackMode 方法。此方法可以检查和修改请求变量。此方法还负责将任何保持的视图状态信息转换回窗体变量(如果该信息尚未在某个变量中)。

  5. 如果适用,加载页的私有视图状态。如果适配器存储页的任何特定于设备的视图状态,则 MobilePage 基类调用页适配器的 LoadAdapterState 方法。

  6. 调用页的 OnLoad 方法。MobilePage 基类的实现调用页适配器的 OnLoad 方法。

  7. 如果适用,保存页的私有视图状态。如果适配器需要存储页的任何特定于设备的视图状态,则 MobilePage 基类调用页适配器的 SaveAdapterState 方法。

  8. MobilePage 基类调用页适配器的 SaveViewState 方法。此方法负责确保作为参数传入的状态被序列化到写入的页。

  9. 在分页过程中,MobilePage 基类访问页适配器的 OptimumPageWeight 属性。适配器返回适合目标设备的页权重。

  10. 调用页的 OnPreRender 方法。MobilePage 基类的实现调用页适配器的 OnPreRender 方法。

  11. 创建一个编写器实例用于捕获页输出。MobilePage 基类调用页适配器的 CreateTextWriter 方法,该方法必须返回特定于目标的文本编写器。

  12. 调用页的 Render 方法。MobilePage 基类的实现调用页适配器的 Render 方法。在呈现过程的某些特定时刻,适配器还负责通过页的 ClientViewState 属性访问并编写页的私有视图状态。

  13. 调用页的 OnUnload 方法。MobilePage 基类的实现调用页适配器的 OnUnload 方法。

请参见

概念

适配器映射

适配器类型

其他资源

添加新的设备适配器和设备支持