ASP.NET 2.0 在 ASP.NET 页的生命周期中提供了两个主要变化。第一,ASP.NET 2.0 公开新的事件来支持新功能,包括母版页、个性化以及集成的移动设备支持。第二,ASP.NET 2.0 为 Web 窗体引入跨页投递。
新事件
与 ASP.NET 1.x 相比,ASP.NET 2.0 提供了一种粒度更细的页面生命周期方法栈。这些添加的方法为 Web 开发人员提供了更高级的控制。可以通过 ASP.NET 页上的 Page 对象来访问这些事件。
表 1 显示综合方法列表。Method 列显示实际事件方法名称,Active 列表示该事件是否总处于活动状态或者仅在 PostBack 操作期间是活动的。例如,新方法 TestDeviceFilter 可用来确定哪种设备筛选器就绪,并用这些信息来决定如何显示页面。另一方面,新方法 LoadControlState 只有在 PostBack 期间才激发。可以重写该方法(结合 SaveControlState)来在 PostBack 期间创建保存和还原控件状态的备选序列化方案。
| 表 1. 页面生命周期方法 | |
| 方法 | 活动 |
|
Constructor |
Always |
|
Construct |
Always |
|
TestDeviceFilter |
Always |
|
AddParsedSubObject |
Always |
|
DeterminePostBackMode |
Always |
|
OnPreInit |
Always |
|
LoadPersonalizationData |
Always |
|
InitializeThemes |
Always |
|
OnInit |
Always |
|
ApplyControlSkin |
Always |
|
ApplyPersonalization |
Always |
|
OnInitComplete |
Always |
|
LoadPageStateFromPersistenceMedium |
Always |
|
LoadControlState |
Always |
|
LoadViewState |
Always |
|
ProcessPostData1 |
Always |
|
OnPreLoad |
Always |
|
OnLoad |
Always |
|
ProcessPostData2 |
Always |
|
RaiseChangedEvents |
Always |
|
RaisePostBackEvent |
Always |
|
OnLoadComplete |
Always |
|
OnPreRender |
Always |
|
OnPreRenderComplete |
Always |
|
SavePersonalizationData |
Always |
|
SaveControlState |
Always |
|
SaveViewState |
Always |
|
SavePageStateToPersistenceMedium |
Always |
|
Render |
Always |
|
OnUnload |
Always |
查看页面生命周期的底层细节,我们可以看到 ASP.NET 2.0 中提供的许多功能(例如主题和个性化)将在什么地方容易实现。例如,主题在 IntializeThemes 事件中处理,而个性化数据将在 LoadPersonalizationData 中加载并稍后用于 ApplyPersonalization 方法。请注意,就哪一个 UI 元素将决定 Web 应用程序的最终外观和感觉而言,方法的顺序非常重要。
跨页投递
页面生命周期中的另一个主要变化涉及回发事件和 Web 窗体。在 ASP.NET 1.x 中,Web 窗体自动回发给它们的宿主页。即,当用户提交一个窗体时,窗体数据总是提交回包含该原始窗体的页面。这种设计决策考虑了存储控件状态的容易性,但限制了开发人员执行更复杂操作的能力。
在 ASP.NET 2.0 中,Web 窗体控件有一个新特性,让开发人员决定在进行提交操作时将窗体数据发送到何处。在大多数情况下,要求 PostBack 机制,因此它仍是默认的机制。但是,如果开发人员想将数据投递到不同的窗体,现在是可能的。

图 4. PostBack 与跨页投递
例如,可以创建一个包含几个不同窗体的多页向导。每个窗体依次提交给下个页面,直到用户到达一个进行最后验证的摘要页。通过 PreviousPage 对象可以在当前的上下文中访问来自最后一页的数据。PreviousPage 对象存储来自前页的已验证数据,以在当前页中使用。由于这个对象,跨页投递不会牺牲控件的持久性存储。如果用户需要依次倒退回一个窗体,那么就可以立即访问该页的数据,而用户不必重新输入所有的数据。
ASP.NET2.0更新了页面生命周期模型,引入新事件支持母版页、个性化等功能,并实现了跨页投递,允许窗体数据提交至不同页面。

424

被折叠的 条评论
为什么被折叠?



