关于IsPostBack的小结

前言:通过本人在实际的工作的观察、总结中,确实发现了很多程序员的“不良现象”,而且很多是广大asp.net程序员共同具备的。今天,我就拿IsPostBack来说说,这玩意很多程序员会用,甚至有很多程序员滥用,大部分人只是在老师或者部分书籍的指导下,习惯性在pageload中使用它,而并没有真正去理解它。或许读者会觉得我说的有点夸张,后续,只要有时间,我会抓紧去总结并整理这些我发现的问题,并且会仔细的给大家讲明白、讲清楚。强烈推荐想深入asp.net方面的读者,一定不要只停留在“拖控件”的层面。当然,如果你觉得自己就想去“专业网站建设"的皮包公司混口饭吃,根本不需要有什么技术深度,那我就无语啦...


1
IsPostBack介绍

IsPostBack是Page类有一个bool类型的属性,用来判断针对当前Form的请求是第一次还是非第一次请求。当IsPostBack=true时表示非第一次请求,我们称为PostBack,当IsPostBack=false时表示第一次请求。在asp.net框架内部有很多的场景需要判断IsPostBack,比如LoadAllState等操作就需要在PostBack的时候进行。对于我们自己使用WebForm进行开发时,经常会在Page_Load中对IsPostBack进行判断,因为第一次请求的时候会执行Page_Load,在非第一次请求的时候也会执行Page_Load。为什么对同一个Form有多次请求呢?asp.net中引入了服务器端事件,支持服务器端事件的控件,会发出对当前Form的请求,这样在很多情形下我们就需要区别是否是对这个Form的第一次请求。

2
IsPostBack结论

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

结论①
对于使用Server.Transfer进行迁移时迁移到的页面其IsPostBack=false。

结论②
Post方式如果Request中没有请求值,即Request.Form =null则IsPostBack=false;Get方式如果Request中没有请求值,即Request.QueryString
=null则IsPostBack=false。

结论③
如果QueryString或Form虽然有请求值,但是QueryString或Form中的Key没有“__VIEWSTATE”和“__EVENTTARGET”和“__VIEWSTATEFIELDCOUNT”,并且没有键为“null”,值以“__VIEWSTATE”开头并且也没有值为“__EVENTTARGET”的键值对,则IsPostBack=false。

结论④
使用Response.Redirect方式向自画面迁移时,此时IsPostBack=false。

结论⑤
发生跨页提交(CrossPagePostBack),当访问PreviousPage属性的时候,对于源Page,IsPostBack=true。

结论⑥
发生跨页提交(CrossPagePostBack)时目标页面是IsPostBack=false

结论⑦
使用Server.Execute迁移到的页面其IsPostBack=false。

结论⑧
在Page运行期间其对应的DLL被更新了并且Page的树结构发生过变化,这种情况下请求时IsPostBack=false。

可以这样来理解这些结论:一般情况判断Request中如果没有请求值则IsPostBack=false。如果有请求值但是不包括“__VIEWSTATE”等一些特殊的键或值,则IsPostBack=false(每次请求后.Net框架会将一些特殊的隐藏域“__VIEWSTATE”等返回给客户端)。还有一些特殊的情形是上面的规则不能正确判断的需要特殊处理的,这些情形包括Server.Transfer,Response.Redirect,CrossPagePostBack,Server.Execute,发生了页面元素变化及重新编译。
一般来说记住上面的结论就可以,如果您有兴趣,或者感到疑惑。可以试着去参考相关资料,  IsPostBack的推论过程。

时间: 2024-08-07 02:19:14

关于IsPostBack的小结的相关文章

IsPostBack原理的介绍_实用技巧

IsPostback的原理-------------------------------------------------------------------------------- 一步一步让你看明白.. 先说说吧,然后在上代码.ispostback:就是判断页面是首次加载的,还是数据回发(有get或者post请求过的)后的页面.上代码吧,直观点. -----------------------------------------------------------------------

Json.net 常用使用小结(推荐)_实用技巧

Json.net 常用使用小结(推荐) using System; using System.Linq; using System.Collections.Generic; namespace microstore { public interface IPerson { string FirstName { get; set; } string LastName { get; set; } DateTime BirthDate { get; set; } } public class Empl

【SpringMVC框架】小结+视图解析器配置前缀和后缀

1.入门程序小结 通过入门程序理解springmvc前端控制器.处理器映射器.处理器适配器.视图解析器用法. 前端控制器配置: 第一种:*.action,访问以.action结尾 由DispatcherServlet进行解析 第二种:/,所以访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析   使用此种方式可以实现 RESTful风格的url 处理器映射器: 非注解处理器映射器(了解) 注解的处理器映射器(掌握)对

Maven项目错误解决小结

Maven项目错误解决小结 注:整理错误,不喜欢为了一个小问题,占篇幅,所以请Ctrl+F自己查看,定位问题,愿为解决. 注:网络上的错误解决经验,只是作者在特定的条件下发生,或者适合你不适合你,请勿责怪,若无解决答案,请你请教他人或耐心解决,可以记录之后分享,我们爱分享,一起开始吧! 问题1: -Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable an

PostBack和ispostback

postback是回传,即页面在首次加载后向服务器提交数据,然后服务器把处理好的数据传递到客户端并显示出来,就叫postback.           ispostback只是一个属性,即判断页面是否是回传,if(!Ispostback)就表示页面是首次加载,这是很常用的一个判断方式. 一个页面只能加载一次,但可以在加载后反复postback.

Python 错误和异常小结[转]

原文链接    http://blog.csdn.net/sinchb/article/details/8392827      事先说明哦,这不是一篇关于Python异常的全面介绍的文章,这只是在学习Python异常后的一篇笔记式的记录和小结性质的文章.什么?你还不知道什么是异常,额... 1.Python异常类     Python是面向对象语言,所以程序抛出的异常也是类.常见的Python异常有以下几个,大家只要大致扫一眼,有个映像,等到编程的时候,相信大家肯定会不只一次跟他们照面(除非你

mongodb测试小结-tina

                         mongodb测试小结  一.基础配置 1)硬件 双核  8G  100G硬盘 2)集群 1 台mongos.config服务器:3台分片:1台独立mongod存放count_temp统计表  二.测试结果 1)中间数据的处理: 3台分片机上 分别跑3个进程,共9个进程,约为430w/h,5000w的数据大概需要11.6h 3台分片机上 分别跑5个进程,共15个进程,约为840w/h,5000w的数据大概需要6h (5个进程会比3个进程分得更平均

用AJAX编写用户注册实例及技术小结

ajax|用户注册 我所举的这个例子是一个企业用户注册时的一个应用,当用户注册时检查用户名和企业名是否可用,以前的做法是在旁边加一个按钮,点击"检查",就向服务器发出请求,然后等待--服务器返回信息,继续操作.如果我们用Ajax技术来实现以上的操作则不必等待服务器返回信息,用户输入用户名或企业名称的时候,当输入文本框失去焦点的时候,则会自动向服务器发出请求,用户继续做下面的操作,不必点击"检查",也不必等待服务器返回信息,检查与用户操作是异步的,可同时进行.当服务器

搜搜慧眼设计小结:Superpower!

前一段时间参与了搜搜慧眼1.0项目的设计工作,从创意到实施,整个历程就是一个愉快的体验. 这里是关于设计理念.设计过程的一点小结,与同事们分享.