Page.IsPostBack属性

现在从对 ASP.NET 页面的执行顺序开始,体会一下 B/S 结构的程序的特点,下图是 ASP.NET 页面的执行顺序说明:

  Page_Init
(页面初始化引发的事件) ——>Page_Load (加载页面时引发的事件) ——>Control Event (服务器控件引发的事件) ——>Page_UnLoad (页面从内存中卸载时引发的事件)

  Page_Init
Page_UnLoad 不常用,但是这里还是要说明一下。 Page_Init Page_Load 事件区别在于,只有后者才能完全加载控件,绑定数据,虽然你可以在 Page_Init 中访问控件,但是其 viewstate 都不会被加载,所以此时控件中只拥有默认值。
 
这里说到了 viewstate ,我们先来做一个大致的了解 —— 其实在 ASP.NET 中有两个 viewstate 。一个是控件本身的,用来维护控件自己的一些状态,比如说某个空间有变色的功能,它的 viewstate 就维护这个功能,这个 viewstate 是不能被用户访问的。相信自己写过控件的朋友都会有这样的感觉,自己写控件当然也要用自己的一个 viewstate 来维护这个控件的状态;而另外一个 viewstate ,是用户使用的,这个 viewstate Session 几乎一模一样,必须要先对其进行定义,才能使用。

 
每当点击 ASP.NET Web 网页上的 Button LinkButton ImageButton 等控件时,表单就会被发送到服务器上。如果某些控件的 AutoPostBack 属性被设置为 true ,那么当该控件的状态被改变后,也会使表单会发送回服务器。 ? AutoPostBack 属性,它只有两个 bool 值, true/false 。如果这个属性被设置成 false ,那么点击后就不会立刻将变化传给服务器处理,也就不会有该控件的 SelectedIndexChanged 事件。)
 
每次当表单被发送回服务器,就会被重新加载,启动 Page_Load 事件,执行 Page_Load 事件处理程序中的所有代码(注意,是每次都会执行!)。
很显然把网页的初始化代码放在这里是最合适不过。我们经常会希望在每次加载网页时执行一些代码,如一些控件的数据绑定。
 
当我们希望只有在网页第一次加载时执行另一些代码(基本上都是数据的默认绑定),甚至希望一些代码在除首次加载外的每次加载时执行。那么我们可以利用 IsPostBack 特性来完成这一功能。在网页第一次加载时,该属性的值是 false 。如果网页因回送而被重新加载, IsPostBack 属性的值就会被设置为 true

 
ASP.NET 应用程序中,如果需要在页面第一次显示时执行一些初始化操作,必须判断 IsPostBack 属性!

 
ASP.NET 使用 Page.IsPostback ,那么就可以避免往返行程上的额外工作:如果处理服务器控件回发,通常需要在第一次请求页时执行代码,该代码不同于激发事件时用于往返行程的代码。如果检查 ?Page.IsPostBack? 属性,则代码可按条件执行,具体取决于是否有对页的初始请求或对服务器控件事件的响应。这样做似乎很明显,但实际上可以忽略此项检查而不更改页的行为。该属性用的好坏,直接关系到你程序运行是否按照你最初的意愿,也关系到整个页面的效率。因为,如果每次都会给控件绑定数据,不管你是第一次访问,还是提交了数据以后,那么这个页面程序的效率可想而知。

 
一个 B/S 结构的页面每一次提交,它都会重新从头到尾执行一次。而 C/S 结构的程序就不会这样 , 这是和 C/S 结构的程序最大的区别! ?  其实,得不到控件的数据,都是因为这个原因。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值