欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET中IsPostBack用法详解

程序员文章站 2024-02-25 10:49:40
本文针对asp.net中ispostback的用法进行了详细的说明,有助于读者更准确的掌握asp.net中ispostback的用法。 一、ispostback介绍:...

本文针对asp.net中ispostback的用法进行了详细的说明,有助于读者更准确的掌握asp.net中ispostback的用法。

一、ispostback介绍:

page.ispostback是一个标志:当前请求是否第一次打开调用方法为:page.ispostback或者ispostback或者this.ispostback或者this.page.ispostback,它们都等价

1)当通过ie的地址栏等方式打开一个url时是第一次打开, 当通过页面的提交按钮或能引起提交的按钮以post的方式提交的服务器时,页面就不再是第一次打开了。(每点击一次按钮,都是一次加载)

2)ispostback只有在第一次打开的时候是false,其它时候都是true

3).net判断一个page是否第一次打开的方法:request.form.count>0

4)每次页面load的时候,根据需要把每次都要加载的代码放在ispostback中,只需要加载一次的代码放在if(!ispostback)中。

5)每次用户回传服务器任何信息的时候,都会引发ispostback属性用来判断此用户是否曾经做过登陆或者其他事件。

二、关于ispostback的结论归纳:

对.net的源代码中相关的处理进行的分析得到如下的结论:

1)对于使用server.transfer进行迁移时迁移到的页面其ispostback=false。

2)post方式如果request中没有请求值,即request.form =null则ispostback=false;get方式如果request中没有请求值,即request.querystring =null则ispostback=false。

3)如果querystring或form虽然有请求值,但是querystring或form中的key没“__viewstate”和“__eventtarget”和“__viewstatefieldcount”,并且没有键为“null”,值以“__viewstate”开头并且也没有值为“__eventtarget”的键值对,则ispostback=false。

4)使用response.redirect方式向自画面迁移时,此时ispostback=false。

5)发生跨页提交(crosspagepostback),当访问previouspage属性的时候,对于源pageispostback=true。

6)发生跨页提交(crosspagepostback)时目标页面是ispostback=false

7)使用server.execute迁移到的页面其ispostback=false。

8)在page运行期间其对应的dll被更新了并且page的树结构发生过变化,这种情况下请求时ispostback=false。

结论总结:
一般情况判断request中如果没有请求值则ispostback=false。如果有请求值但是不包括“__viewstate”等一些特殊的键或值,则ispostback=false每次请求后.net框架会将一些特殊的隐藏域“__viewstate”等返回给客户端)。还有一些特殊的情形是上面的规则不能正确判断的需要特殊处理的,这些情形包括server.transfer,response.redirect,crosspagepostback,server.execute,发生了页面元素变化及重新编译