当前位置:编程学习 > C#/ASP.NET >>

ispostback实现原理

请问 ispostback的实现原理是什么 --------------------编程问答-------------------- 不明白原理,只知道在页面加载的时候经常用到这句话判断。
要不刷新可能有问题。。 --------------------编程问答-------------------- 也就是说页面属于get提交时是ispostback为false,如果是post提交是ispostback为true;

你把它理解成回滚就ok了。 --------------------编程问答-------------------- 没啥实现原理,无非是微软的大大们加了几个隐藏表单,用js拦截了一下submit的动作

自己看看生成页面的viewstate那几个隐藏表单元素,再看看页面上__doPastback的js函数就清楚了

呵呵,这些并不是新鲜玩意,N年前asp的年代人人都这么用,只不过微软把这种大众化的hack技巧,改成了默认的实现  --------------------编程问答-------------------- 有篇blog,参考:

http://www.cnblogs.com/hobe/archive/2008/04/06/1139031.html

--------------------编程问答-------------------- ispostback 直面意思就是,"是传回来的"

当你第一次开这个页面时,很显然,他不是服务器传回来的。所以他不执行

。当你在这个页面再次提交信息时,页面把信息传递给服务器,服务器再返回页面信息。这个信息就是服务器传回来的。所以 ispostback就是true

经常用在判断输入

如  if(!=ispostback)
      username=""
上面的意思是说,如果是首次加载页面,那么用户名设置为空,否则。用户名就是你输入的值。

--------------------编程问答-------------------- 目前就知道是一种回发状态,实现原理不清楚 --------------------编程问答-------------------- ispostback 楼主可以理解为“是否回传”,!isPostBack  可以理解为首次加载,你要问原理的话,就是一个属性啊,没什么解释的,页面载入流程你设断点跟踪一下就可以了,理解什么意思就能用! --------------------编程问答-------------------- Form的请求 true的时候是第一次请求, --------------------编程问答--------------------

<body>
<form action="Hello2.ashx" >
<input type="hidden"  name="ispostback"  value="true"/>
<input type="text"  name="input"/>
<input  type="submit"  value="doPost回发"/>
</form>
</body>  


string ispostback =context.Request["ispostback"];
            if (ispostback=="true")
            {
                context.Response.Write("这是回发处理,因为有请求信息");
            }
            else
            {
                context.Response.Write("直接访问,没有回发");
            }

//由此可以初步的推出,asp.net中的IsPostBack属性的机制了,揭秘和PostBack相关的技术
//根据表单的name,获取表单值。如果ispostback值为true,说明是通过表单提交了信息,而请求进入的
      //反之 则是直接访问进入,或者是第一次请求进入. --------------------编程问答-------------------- 当然,这只是最基本的原理。asp.net中的回发,还涉及到viewstate等等因素。比如说:

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。
我也记不太清楚了

--------------------编程问答-------------------- 这个问题其实想通了很简单,完全可以从它的名字理解。ispostback:是否是post回来。言下之意:除了自己页控件引用发回传之外其他情况都不属于postback。那么其判别依据也就一目了然了:看数据提交页是不是本页 。如果是就是postback。而第一次访问页面时根本就没有数据提交页,哪来的postback一说,也就自然是!IsPostBack了。哈哈,以上只是个人理解,仅供参考。 --------------------编程问答-------------------- IsPostBack实际上就是表单中的隐藏域,它的value固定式true,当用户点击“自加”按钮后,IspostBack同样也被提交到服务器端,处理程序读出了这个值便可以判定页面是被提交的,然后读取提交值作相应处理,如果读不到,则页面时首次进入,我们可以欺骗服务器:直接在浏览器中输入地址http://localhost:1128/IncNum.ashx?IsPostBack=true,则处理程序会把页面当成提交的页面处理。

在aspx页面中的IsPostBack就是使用这个原理实现的。

--------------------编程问答--------------------   --------------------编程问答-------------------- 3楼正解,其他都是扯淡.
另外,想获得客户端的状态无非两种途径:cookie session,微软将操作cookie和session的步骤隐藏起来了,用着方便了,但是原理就不容易搞明白了 --------------------编程问答--------------------
引用楼主  的回复:
请问 ispostback的实现原理是什么


1. 如果根本没有因post命令而提交的表单输入数据,返回false。
2. 如果有post命令而提交的表单输入数据,并且其中一个数据标记了跨页访问(CrossPagePostback)的目标,返回true。
3. 如果有post表单数据,但是没有跨页访问目标,却有 __ViewState 数据,返回true。
4. 如果有post命令,并且没有__ViewState,但是是跨页访问的最终目标页时,返回false。
5. 如果上述全都不成立,另外计算 (((this.Context.ServerExecuteDepth <= 0) || ((this.Context.Handler != null) && (base.GetType() == this.Context.Handler.GetType()))) && !this._fPageLayoutChanged) 懒的去看给你说了


你也可以参考 http://www.cnblogs.com/hobe/archive/2008/04/06/1139031.html。但是要记住一点,所谓“原理”就是看有没有读过源代码,不是靠瞎猜。所以与其在csdn上去一遍遍乞求“原理”,不如自己养成看源代码的习惯,看教科书书则要选择那些结合了源代码给你讲解的书、而不是入门书,这就行了。 --------------------编程问答--------------------
引用 14 楼  的回复:
3楼正解,其他都是扯淡.
另外,想获得客户端的状态无非两种途径:cookie session,微软将操作cookie和session的步骤隐藏起来了,用着方便了,但是原理就不容易搞明白了


公司里这样的程序员会有很大被离职的压力的
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,