执行程序有两种模式:线性模式和事件驱动模式。理解ASP.NET的关键是,它是事件驱动模式。
- 线性模式
线性模式的程序从第一步开始执行,然后执行第二步等,直至所有步骤执行完毕为止。一旦程序开始执行,在用户或系统的操作下,它将一直运行下去。在有GUI环境之前,大多数计算机程序都是线性模式。
- 事件驱动模式
事件驱动模式的程序是当发生某些事情时进行响应。多数情况下,事件由用户行为生成,但是由系统触发。服务器控件是可以触发事件的对象。用户在浏览器上对服务器控件所执行的任何行为都可能触发事件。服务器端代码响应事件,并运行存储在事件处理方法中的代码。
所有的ASP.NET的事件都在服务器端处理。有些事件立刻发送到服务器,另外有一些事件则被存储,直到下次页面回传到服务器。在ASP.NET应用程序中,事件通常都在客户端触发(例如用户单击浏览器上显示的按钮),但在服务器上处理。
事件依靠委托实现。委托是一个对象,它封装了对方法的描述,即处理事件所指定的任务。
应用程序事件:
当应用程序启动时,将触发Application_Start事件。这时,可以初始化整个应用程序中需要使用的各种资源,例如,数据库连接字符串(而不是数据库连接对象本身)。当应用程序停止时,将触发Application_End事件。这时,可以关闭资源,同时执行任何其他必要的日常管理。垃圾回收机制将自动释放内存。然而,
如果分配了托管的资源,例如,使用无需.NET框架编译的语言所创建的组件,那么必需自行手工清除。
会话事件:
当用户第一次请求应用程序的页面时,会话开始,触发Session_Start事件,这时,可以初始化会话生命周期中使用的资源,例如打开数据库连接,尽管更好的时机是:需要的时候再去打开数据库连接,并且使用完毕立刻关闭。当应用程序关闭会话或会话超时,会话结束,触发Session_End事件。
回传事件和非回传事件:
回传事件促使表单立刻回传到服务器。这包括单击类型的事件,例如Button.Click。与之相对的是,某些事件(典型的有修改事件,例如:TextBox.TextChanged,或者选择事件,例如CheckBox.CheckedChanged)被认为是非回传的,因为,事件并不立刻回传到服务器。这些事件由控件捕获,直到再次发生回传。设置非回传事件控件的AutoPostBack属性为true,则可以强制使它们采用回传方式。
Page对象具有IsPostBack属性。这是一个只读的Boolean类型属性,它可以指示页面是第一次加载还是为了响应客户端回传而进行的加载。可以只在页面第一次加载时,执行一些耗费资源的操作(例如,从数据库获取数据或构造列表项)。如果页面回传到服务器并再次加载,就无需重复这些操作了。因为,任何输入或构建的数据都已被保留(使用视图状态)到后续的回传中。