学习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,发生了页面元素变化及重新编译。

看似很简单的东东,还有不少的知识吧?

最新文章

  1. 《java中异常和错误》
  2. 哇 真的是一个好插件!!!Sublime Text编辑文件后快速刷新浏览器
  3. 元组tuple
  4. mysql锁
  5. TypeScript的崛起
  6. offsetLeft与style.left区别
  7. 帕金森定律(Parkinson's Law)
  8. HDU1358:Period
  9. 实现JavaScript的组成----BOM和DOM
  10. 基于webrtc的多人视频会话的demo运行程序
  11. ios 75个工具
  12. GEF的MVC体系结构
  13. 浅谈测试rhel7新功能时的感受及遇到的问题【转载】
  14. 【Ubuntu 16】启动Eclipse Indigo报错 error code1 jdk没有配置好
  15. 【JDK1.8】JUC.Lock综述
  16. php 调试的常用方法
  17. JAVA追加写入文本文件
  18. sublime3安装ctags追踪插件
  19. html5解决ajax破坏浏览器机制
  20. JavaScript中textRange对象使用方法总结

热门文章

  1. VMware12 pro装unlocker207补丁后依然没有apple mac选项,问题解决
  2. beta阶段——项目复审
  3. sublime text 插件集锦
  4. Delphi中的ADOquery 用法以及ADOquery的自有方法Append 和Delete和 Edit 和Post
  5. zepto中$.proxy()的到底有多强大?
  6. POJ2823_Sliding Window
  7. 51nod 1821 最优集合(思维+单调队列)
  8. 【bzoj5173】[Jsoi2014]矩形并 扫描线+二维树状数组区间修改区间查询
  9. "strcmp()" Anyone? UVA - 11732(trie出现的次数)
  10. castle activerecord 学习过程出现的问题