IsPostBack属性初探

“获取一个值,该值指示该页是否正为响应客户端回发而加载,或者它是否正被首次加载和访问。如果是为响应客户端回发而加载该页,则为 true;否则为 false。”

以上是MSDN的注解,初看之时是一头雾水,其实很多东西只要亲手实践并调试一下就可以理解其用意。

注:Page和UserControl类中均有IsPostBack属性

IsPostBack属性常用在Page_Load事件处理代码中,如果“首次加载”,则为false,因为它并不是“为响应客户端回发而加载的”。但是这里容易混淆的是“首次加载”这个概念。以下做了一个试验:一个Default.aspx,一个FirstLayout.ascx控件,Default.aspx中包含一个PlaceHolder,负责装入FirstLayout.ascx控件,伪代码如下:


Code

当首次进行调试的时候进入Default页面Page_Load()事件处理代码域时,Default.aspx中的IsPostBack为false,并不进行加载。当对页面刷新进入时(譬如单击某LinkButton,再次进入Default.aspx页面,F5刷新不算),此时因为Default页面中的IsPostBack属性为true,负责加载FirstLayout.ascx,此刻进入FirstLayout的Page_Load事件处理代码中时,UserControl的IsPostBack属性也是为true。

现在可以发现“判断是否为响应客户端回发而加载的”的表述才是用作判断的标准,而我们已经无法判断FirstLayout是否是第一次被加载了。

可以这么说,“它是否正被首次加载和访问”来判断IsPostback的值容易引起二义性。

 

页面调用的详细顺序如下:

1.     客户端请求Default.aspx页面,IsPostbackfalse

2.     客户端单击页面上的某一按钮,应用程序重新进入Page_Load()事件处理代码域,此时IsPostbacktrue

3.     进入该按钮的单击处理事件代码域,执行完该代码域后,页面刷新重新进入某一新页面(也可能为回到原来页面)的Page_Load()事件处理代码域,此时IsPostbackfalse


如果想同时判断控件“是否第一次被加载”和“是否为响应客户端回发而加载”,可以参考以下代码:

Code


现在FirstLayout中的Page_Load事件处理代码中就可以使用IsUserControlPostBack属性判断“是否是第一次被加载”以及“为响应客户端回发而加载”了。

posted @ 2009-08-02 15:05  David Tsu  阅读(957)  评论(0编辑  收藏  举报