IsPostBack深入探讨
1IsPostBack介绍
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的第一次请求。
2IsPostBack结论
本人对.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推论过程。
IsPostBack深入探讨的更多相关文章
- ASP之ViewState和IsPostBack
没怎么写过ASPX页面,今天在做增删改的界面的时候,修改出了问题. 根据传过来的ObjectID加载页面数据,赋值给TextBox控件后,修改控件的值回写数据库,发现值没有变化. 简单的例子如下: 然 ...
- Android业务组件化之现状分析与探讨
前言: 从个人经历来说的话,从事APP开发这么多年来,所接触的APP的体积变得越来越大,业务的也变得越来越复杂,总来来说只有一句话:这是一个APP臃肿的时代!所以为了告别APP臃肿的时代,让我们进入一 ...
- 对CSS中的Position、Float属性的一些深入探讨
对CSS中的Position.Float属性的一些深入探讨 对于Position.Float我们在平时使用上可以说是使用频率非常高的两个CSS属性,对于这两个属性的使用上面可能大多数人存在一些模糊与不 ...
- 从EF的使用中探讨业务模型能否脱离单一存储层完全抽象存在
上次赶时间,就很流水账地写了上次项目对EF的一次实践应用模式,因为太长了,也没能探讨太多,所以再继续扩展. 这次想探讨的是,实体,如果作为类似于领域模型的业务模型存在,它的数据能否来自不同的数据源.这 ...
- 1.【使用EF Code-First方式和Fluent API来探讨EF中的关系】
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/relationship-in-entity-framework-using-code-firs ...
- 移动Web之响应式布局的探讨
响应式布局的探讨 响应式布局的两种方式 基于百分比的布局 例:Bootstrap 基于rem的布局 例:淘宝触屏版 这两种布局都需要依赖于CSS3的media query来设置布局断点(或者通过js监 ...
- ASP.NET探讨:技术的学习顺序问题
作者: シtearシ 来源: 博客园 发布时间: 2011-09-27 08:40 阅读: 7675 次 推荐: 25 原文链接 [收藏] 摘要:很多人对于ASP.NET的入门和学 ...
- 深入探讨:标签(Tag)的各种设计方案
首先,标签(Tag)是什么? 我的理解:用来具体区分某一类内容的标识,和标签类似的一个概念是分类(Category),有一个示例可以很好的区分它们两个,比如人类分为:白种人.黄种人和黑种人(可以看作分 ...
- (十六)WebGIS中偏移补偿量引发的问题之探讨
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 在上一章里讲解地图平移功能的实现时,我在最后提出了两个问题: ...
随机推荐
- Android自动折行TextView Group
package com.test.testview; import java.util.ArrayList; import android.content.Context; import androi ...
- 第 3 章 第 1 题 精简冗余 if 语句问题 使用数组实现
问题分析 输入:用户个人收入 输出:该用户要缴纳的个人所得税 约束:不允许使用过多的 if 语句 解答思路 最简单的方法是根据不同的税率区间,创建多个 if 语句来求解.但如此一来便会有 25 个 i ...
- 解决Linq.ToDictionary()时的键重复问题
今天在使用 Linq 的 ToDictionary() 时发生了异常,提示: System.ArgumentException: 已添加了具有相同键 因为以前一直没有遇到有相同键的情况,所以从来没关注 ...
- CXF实战之自己定义拦截器(五)
CXF已经内置了一些拦截器,这些拦截器大部分默认加入到拦截器链中,有些拦截器也能够手动加入,如手动加入CXF提供的日志拦截器.也能够自己定义拦截器.CXF中实现自己定义拦截器非常easy.仅仅要继承A ...
- IP address could not be resolved: Name or service not known
[root@test ~]# /usr/local/mysql/bin/mysqld2018-08-05T07:00:33.647509Z 0 [Warning] [MY-011070] [Serve ...
- Git检出远程库的分支等相关操作
来到公司,询问同事后发现系统已经上传到Git远程仓库: 我这里先把远程仓库clone下来: $ git clone http://git.eas****tect.git 发现目录下只有一个READY. ...
- 3个CCIE考官对一个高级工程师的面试题
3个CCIE考官对一个高级工程师的面试题 转载 时间:2015-7-10 原文转载: 1.现在的6509及7609,SUP720交换带宽去到720G,是不是可以说7609/6509 可以取代一部分GS ...
- 给第三方apk进行系统签名的几种方式【转】
本文转载自:http://blog.csdn.net/luzhenrong45/article/details/47733053 版权声明:本文为博主原创文章,未经博主允许不得转载. -------- ...
- 最优配对问题(集合上的动态规划) —— 状压DP
题目来源:紫书P284 题意: 给出n个点的空间坐标(n为偶数, n<=20), 把他们配成n/2对, 问:怎样配对才能使点对的距离和最小? 题解: 设dp[s]为:状态为s(s代表着某个子集) ...
- codeforces 463B Caisa and Pylons 解题报告
题目链接:http://codeforces.com/problemset/problem/463/B 题目意思:Caisa 站在 0 pylon 并且只有 0 energy,他需要依次跳过1 pyl ...