页面事件顺序是固定的,但页面上的控件事件则依赖具体页面和用户的操作。如果控件的AutoPostBack属性设置为true(默认值为 false),那么将立刻引起页面回发,即页面中各个控件的值回传到Web服务器上,引发相应事件,由事件的处理程序处理。处理完成后如果没有跳转指令, 该页面将再此发送到客户端的浏览器上。如果控件的AutoPostBack属性设置为false,那么它的事件将不会一发生就马上回传,而要等到像 Button Click这样的回传事件发生,才一并回传。期间可能有多个事件被暂存在客户端,但是如果一个控件的一个事件重复发生,则只暂存最后一次事件的信息。
如 果页面的AutoEventWireup属性为false(默认值为true),那么页面回传后页面的事件将不会引发。AutoEventWireup属 性可以在@ Page指令中设置,或者在Web.config文件中设置autoEventWireup属性。
由于页面回发机制,程序员可能需要确定当前页面是第一次发送到客户端,还是由于事件回传造成的页面回发。比如:当对页面控件进行初始化时,如果是第一次发 送到客户端,则需要进行初始化,如数据绑定等;如果是由于事件回传造成的页面回发,因为已经初始化过了,所以无需再次初始化。页面的IsPostBack 属性就是专门用来做回发检查的。如果是回发,IsPostBack的值取true,否则取false。
当页面中的服务器控件的AutoPostBack属性为fales时,是不允许控件向服务器发送请求进行交互的。
例如:CheckBox控件AutoPostBack属性为fales, 那么CheckBox控件的CheckChanged事件无法提交到服务器作处理,不会产生流量,所以服务器也无法对CheckChanged事件中的代码作处理,当AutoPostBack为true时,CheckBox控件的CheckChanged事件触发后会提交到服务器进行处理,处理完成后服务器回发一个新处理完成后的页面。
理解原理:服务器控件的事件触发后,都会向服务器发送一个Request请求,而事件中的代码则是在服务器端处理的,处理完成之后服务器会回发一个新的处理完成后的页面。