请问 ispostback的实现原理是什么

解决方案 »

  1.   

    也就是说页面属于get提交时是ispostback为false,如果是post提交是ispostback为true;你把它理解成回滚就ok了。
      

  2.   

    没啥实现原理,无非是微软的大大们加了几个隐藏表单,用js拦截了一下submit的动作自己看看生成页面的viewstate那几个隐藏表单元素,再看看页面上__doPastback的js函数就清楚了呵呵,这些并不是新鲜玩意,N年前asp的年代人人都这么用,只不过微软把这种大众化的hack技巧,改成了默认的实现 
      

  3.   

    有篇blog,参考:http://www.cnblogs.com/hobe/archive/2008/04/06/1139031.html
      

  4.   

    ispostback 直面意思就是,"是传回来的"当你第一次开这个页面时,很显然,他不是服务器传回来的。所以他不执行。当你在这个页面再次提交信息时,页面把信息传递给服务器,服务器再返回页面信息。这个信息就是服务器传回来的。所以 ispostback就是true经常用在判断输入如  if(!=ispostback)
          username=""
    上面的意思是说,如果是首次加载页面,那么用户名设置为空,否则。用户名就是你输入的值。
      

  5.   

    ispostback 楼主可以理解为“是否回传”,!isPostBack  可以理解为首次加载,你要问原理的话,就是一个属性啊,没什么解释的,页面载入流程你设断点跟踪一下就可以了,理解什么意思就能用!
      

  6.   

    Form的请求 true的时候是第一次请求,
      

  7.   


    <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,说明是通过表单提交了信息,而请求进入的
          //反之 则是直接访问进入,或者是第一次请求进入.
      

  8.   

    当然,这只是最基本的原理。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。
    我也记不太清楚了
      

  9.   

    这个问题其实想通了很简单,完全可以从它的名字理解。ispostback:是否是post回来。言下之意:除了自己页控件引用发回传之外其他情况都不属于postback。那么其判别依据也就一目了然了:看数据提交页是不是本页 。如果是就是postback。而第一次访问页面时根本就没有数据提交页,哪来的postback一说,也就自然是!IsPostBack了。哈哈,以上只是个人理解,仅供参考。
      

  10.   

    IsPostBack实际上就是表单中的隐藏域,它的value固定式true,当用户点击“自加”按钮后,IspostBack同样也被提交到服务器端,处理程序读出了这个值便可以判定页面是被提交的,然后读取提交值作相应处理,如果读不到,则页面时首次进入,我们可以欺骗服务器:直接在浏览器中输入地址http://localhost:1128/IncNum.ashx?IsPostBack=true,则处理程序会把页面当成提交的页面处理。在aspx页面中的IsPostBack就是使用这个原理实现的。
      

  11.   

    3楼正解,其他都是扯淡.
    另外,想获得客户端的状态无非两种途径:cookie session,微软将操作cookie和session的步骤隐藏起来了,用着方便了,但是原理就不容易搞明白了
      

  12.   


    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上去一遍遍乞求“原理”,不如自己养成看源代码的习惯,看教科书书则要选择那些结合了源代码给你讲解的书、而不是入门书,这就行了。