更新:2007 年 11 月
在 ASP.NET 移动控件及其关联的适配器的生命周期中发生两种类型的交互:控件和设备适配器之间的交互以及页和页适配器之间的交互。
控件和控件设备适配器
在移动控件的生命周期中,在控件及其关联的设备适配器之间发生以下交互:
- ASP.NET 先检查缓存中是否存在页的副本。如果存在,则将缓存的页发送到客户端。有关缓存的更多信息,请参见移动文本编写器呈现的最佳做法的“输出缓存”一节。 
- 创建控件。当首次试图访问控件的 Adapter 属性时,将选择控件适配器并创建它的一个新实例,如适配器映射中的“了解设备适配器选择过程”一节所述。 - 当创建新适配器时,将设置控件设备适配器的 Control。 
- 如果页进行了缓存,则该页将调用适配器以确定缓存是否需要通过任何附加头有所变化。 
- 调用控件的 OnInit 方法。MobileControl 基类的实现调用控件设备适配器的 OnInit 方法。 
- 如果存在控件的私有视图状态,则将加载该状态。如果设备适配器存储了控件的任何设备特定的状态,则 LoadPrivateViewState 方法的 MobileControl 基类实现将调用控件设备适配器的 LoadAdapterState 方法。 
- 调用控件的 OnLoad 方法。MobileControl 基类的实现调用控件设备适配器的 OnLoad 方法。 
- 如果控件实现 IPostBackEventHandler 接口并接收回发事件,则调用控件的 RaisePostBackEvent 方法。如果发送到控件的事件能够根据目标设备有所变化,则此方法的控件实现将调用控件设备适配器的 HandlePostBackEvent 方法。HandlePostBackEvent 方法返回 true 或 false,指示设备适配器是否已处理事件。 
- 如果适用,保存控件的私有视图状态。如果适配器需要存储控件的任何设备特定的状态,则 SavePrivateViewState 方法的 MobileControl 基类实现将调用控件设备适配器的 SaveAdapterState 方法。 
- 调用控件的 OnPreRender 方法。MobileControl 基类的实现调用控件设备适配器的 OnPreRender 方法。 
- 调用控件的 Render 方法。MobileControl 基类的实现调用控件适配器的 Render 方法。 
- 调用控件的 OnUnload 方法。MobileControl 基类的实现调用控件设备适配器的 OnUnload 方法。 
页和页适配器
虽然 MobilePage 类从 .NET Framework Page 类(而不是 MobileControl 类)继承,但 MobilePage 类与适配器相关的行为非常类似于 MobileControl 类的行为。
ASP.NET 中的移动页适配器(例如 ChtmlPageAdapter、HtmlPageAdapter、WmlPageAdapter 或 XhtmlPageAdapter)实现 IPageAdapter 接口(该接口本身实现 IControlAdapter 接口)。因此,页适配器的大部分生命周期类似于控件适配器的生命周期。移动页及其设备适配器的交互特定于 Page 类,并且在它们的生命周期中经历以下步骤:
- ASP.NET 创建一个页。当首次试图访问页的 Adapter 属性时,将选择页适配器并创建它的一个实例,如适配器映射中的“了解设备适配器选择过程”一节所述。当创建适配器时,将设置页适配器的 Page 属性。 
- 调用页的 OnInit 方法。MobilePage 基类的实现调用页适配器的 OnInit 方法。 
- 调用页的 OnDeviceCustomize 方法。MobilePage 基类的实现调用页适配器的 OnDeviceCustomize 方法。 
- 若要确定页的回发模式(如果适用),则 MobilePage 基类将调用页适配器的 DeterminePostBackMode 方法。此方法可以检查和修改请求变量。此方法还负责将任何保持的视图状态信息转换回窗体变量(如果该信息尚未在某个变量中)。 
- 如果适用,加载页的私有视图状态。如果适配器存储页的任何特定于设备的视图状态,则 MobilePage 基类调用页适配器的 LoadAdapterState 方法。 
- 调用页的 OnLoad 方法。MobilePage 基类的实现调用页适配器的 OnLoad 方法。 
- 如果适用,保存页的私有视图状态。如果适配器需要存储页的任何特定于设备的视图状态,则 MobilePage 基类调用页适配器的 SaveAdapterState 方法。 
- MobilePage 基类调用页适配器的 SaveViewState 方法。此方法负责确保作为参数传入的状态被序列化到写入的页。 
- 在分页过程中,MobilePage 基类访问页适配器的 OptimumPageWeight 属性。适配器返回适合目标设备的页权重。 
- 调用页的 OnPreRender 方法。MobilePage 基类的实现调用页适配器的 OnPreRender 方法。 
- 创建一个编写器实例用于捕获页输出。MobilePage 基类调用页适配器的 CreateTextWriter 方法,该方法必须返回特定于目标的文本编写器。 
- 调用页的 Render 方法。MobilePage 基类的实现调用页适配器的 Render 方法。在呈现过程的某些特定时刻,适配器还负责通过页的 ClientViewState 属性访问并编写页的私有视图状态。 
- 调用页的 OnUnload 方法。MobilePage 基类的实现调用页适配器的 OnUnload 方法。