IsPostBack属性初探
“获取一个值,该值指示该页是否正为响应客户端回发而加载,或者它是否正被首次加载和访问。如果是为响应客户端回发而加载该页,则为 true;否则为 false。”
以上是MSDN的注解,初看之时是一头雾水,其实很多东西只要亲手实践并调试一下就可以理解其用意。
注:Page和UserControl类中均有IsPostBack属性
IsPostBack属性常用在Page_Load事件处理代码中,如果“首次加载”,则为false,因为它并不是“为响应客户端回发而加载的”。但是这里容易混淆的是“首次加载”这个概念。以下做了一个试验:一个Default.aspx,一个FirstLayout.ascx控件,Default.aspx中包含一个PlaceHolder,负责装入FirstLayout.ascx控件,伪代码如下:
以上是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页面,IsPostback为false
2. 客户端单击页面上的某一按钮,应用程序重新进入Page_Load()事件处理代码域,此时IsPostback为true
3. 进入该按钮的单击处理事件代码域,执行完该代码域后,页面刷新重新进入某一新页面(也可能为回到原来页面)的Page_Load()事件处理代码域,此时IsPostback为false
如果想同时判断控件“是否第一次被加载”和“是否为响应客户端回发而加载”,可以参考以下代码:
Code
现在FirstLayout中的Page_Load事件处理代码中就可以使用IsUserControlPostBack属性判断“是否是第一次被加载”以及“为响应客户端回发而加载”了。