How does IsPostback technically work?

前端 未结 3 478
遥遥无期
遥遥无期 2020-12-01 11:26

I\'m currently having a strange issue whereby all browsers except from Google Chrome are registering a call to IsPostback within a Page_Load event as true when I click an as

相关标签:
3条回答
  • 2020-12-01 11:50

    The page looks for the existence of a __PREVIOUSPAGE form value.

    From Reflector:

    public bool IsPostBack
    {
        get
        {   //_requestValueCollection = Form or Querystring name/value pairs
            if (this._requestValueCollection == null)
            {
                return false;
            }
    
            //_isCrossPagePostBack = _requestValueCollection["__PREVIOUSPAGE"] != null
            if (this._isCrossPagePostBack)
            {
                return true;
            }
    
            //_pageFlags[8] = this._requestValueCollection["__PREVIOUSPAGE"] == null
            if (this._pageFlags[8])
            {
                return false;
            }
    
            return (   ((this.Context.ServerExecuteDepth <= 0) 
                    || (   (this.Context.Handler != null) 
                        && !(base.GetType() != this.Context.Handler.GetType())))
                    && !this._fPageLayoutChanged);
        }
    }
    
    0 讨论(0)
  • 2020-12-01 12:01

    Is Postback is implemented as such (using Reflector):

    public bool get_IsPostBack()
    {
        if (this._requestValueCollection == null)
        {
            return false;
        }
        if (this._isCrossPagePostBack)
        {
            return true;
        }
        if (this._pageFlags[8])
        {
            return false;
        }
        return (((this.Context.ServerExecuteDepth <= 0) || ((this.Context.Handler != null) && !(base.GetType() != this.Context.Handler.GetType()))) && !this._fPageLayoutChanged);
    }
    

    So unless you take into account all these parameters, it will not be possible to trace it.

    0 讨论(0)
  • 2020-12-01 12:07

    Postback actually works fairly simply by submitting the form to itself (for the most part). The javascript code is actually put on your page:

    <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
    <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
    
    function __doPostBack(eventTarget, eventArgument) {
        if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
            theForm.__EVENTTARGET.value = eventTarget;
            theForm.__EVENTARGUMENT.value = eventArgument;
            theForm.submit();
        }
    }
    

    Marks answer shows you the server side code that is run.

    0 讨论(0)
提交回复
热议问题