控件生命周期是最重要的架构概念。控件的生命周期决定何时保存控件和恢复它的状态,何时与页面及其他控件之间进行交互,何时执行主要的处理逻辑,以及何时对输出流显示标记文本。
当浏览器给ASP.NET页面发送请求时,就产生了无状态的HTTP协议的通信。然而,页面框架创建了一个假想的有状态的执行过程,这种过程能够使页面提供与一个连续执行的状面程序相似的用户经验。为了创建这种假想的连续性,对初始请求之后的每一个后续请求,页面实际上是在前一个请求完成之后再从刚刚中断的地方开始继续执行。页面在处理完一个请求之后保存了它的状态,在回传时,再在处理新的请求之前恢复已保存的状态。这种保存和恢复状态的过程是页面和其控件的生命周期中最重要的方面。
回传架构
回传是HTTP POST请求(或者说是在URL查询字符串中带有数据的HTTP GET请求),这个请求发生在用户提交表单时。提交表单元素的控件需要对回传作出响应、捕获表单数据、更新状态并在回传过程中执行其他逻辑。
ASP.NET 提供了一个简单并且直观的架构,能够使控件通过实现一个或者两个接口--IPostBackEventHandler和IPostBackDataHandler,执行与回传有关的任务。
IPostBackEventHandler接口使控件引发一个标志着已经发生回传的事件。实际上,此接口使控件把客户端的提交表单事件映射到服务器事件,允许页面开发者通过将事件处理程序附加到服务器端时间来处理客户端事件。
IPostBackDataHandler接口使控件检索已被传送的表单数据,从而相应的更新状态,然后在服务端引发事件以标志其状态变化。
优化事件实现
如果一个类引发了多个事件,通过每一个事件声明一个事件成员来执行是低效的。优化事件实现依赖于事件属性结构。.net框架更加有效的事件实现模式,此框架使用了System.ComponentModel.EventHandlerList类,这个类是一个优化了的委托的存储和取回的链表。
private EventHandlerList _events;
protected EventHandlerList Events{
get{
if(_events == null){
_events = new EventHandlerList();
}
return _events;
}
}