现在从对ASPNET页面的执行顺序开始体会一下B/S结构的程序的特点下图是ASPNET页面的执行顺序说明Page_Init(页面初始化引发的事件)——>Page_Load(加载页面时引发的事件)——>Control Event(服务器控件引发的事件)——>Page_UnLoad(页面从内存中卸载时引发的事件) Page_Init和Page_UnLoad不常用但是这里还是要说明一下Page_Init和Page_Load事件区别在于只有后者才能完全加载控件绑定数据虽然你可以在Page_Init中访问控件但是其viewstate都不会被加载所以此时控件中只拥有默认值 这里说到了viewstate我们先来做一个大致的了解——其实在ASPNET中有两个viewstate一个是控件本身的用来维护控件自己的一些状态比如说某个空间有变色的功能它的viewstate就维护这个功能这个viewstate是不能被用户访问的相信自己写过控件的朋友都会有这样的感觉自己写控件当然也要用自己的一个viewstate来维护这个控件的状态而另外一个viewstate是用户使用的这个viewstate和Session几乎一模一样必须要先对其进行定义才能使用 每当点击ASPNET的Web网页上的ButtonLinkButton或ImageButton等控件时表单就会被发送到服务器上如果某些控件的AutoPostBack属性被设置为true那么当该控件的状态被改变后也会使表单会发送回服务器?(AutoPostBack属性它只有两个bool值true/false如果这个属性被设置成false那么点击后就不会立刻将变化传给服务器处理也就不会有该控件的SelectedIndexChanged事件) 每次当表单被发送回服务器就会被重新加载启动Page_Load事件执行Page_Load事件处理程序中的所有代码(注意是每次都会执行!) 很显然把网页的初始化代码放在这里是最合适不过我们经常会希望在每次加载网页时执行一些代码如一些控件的数据绑定 当我们希望只有在网页第一次加载时执行另一些代码(基本上都是数据的默认绑定)甚至希望一些代码在除首次加载外的每次加载时执行那么我们可以利用IsPostBack特性来完成这一功能在网页第一次加载时该属性的值是false如果网页因回送而被重新加载IsPostBack属性的值就会被设置为true在ASPNET应用程序中如果需要在页面第一次显示时执行一些初始化操作必须判断IsPostBack属性! 在ASPNET使用PageIsPostback那么就可以避免往返行程上的额外工作如果处理服务器控件回发通常需要在第一次请求页时执行代码该代码不同于激发事件时用于往返行程的代码 如果检查?PageIsPostBack?属性则代码可按条件执行具体取决于是否有对页的初始请求或对服务器控件事件的响应这样做似乎很明显但实际上可以忽略此项检查而不更改页的行为该属性用的好坏直接关系到你程序运行是否按照你最初的意愿也关系到整个页面的效率因为如果每次都会给控件绑定数据不管你是第一次访问还是提交了数据以后那么这个页面程序的效率可想而知 一个B/S结构的页面每一次提交它都会重新从头到尾执行一次而C/S结构的程序就不会这样这是和C/S结构的程序最大的区别!?其实得不到控件的数据都是因为这个原因 |