2011-04-13 9 views
12

मुझे वर्तमान में एक अजीब समस्या है जिससे Google क्रोम को छोड़कर सभी ब्राउज़र्स एक पेज_लोड ईवेंट में IsPostback को कॉल कर रहे हैं, जब मैं एक एएसपीनेट बटन पर क्लिक करता हूं जो बस उसी पृष्ठ पर पोस्ट करता है।IsPostback तकनीकी रूप से कैसे काम करता है?

इससे मुझे एएसपी के भीतर IsPostback संपत्ति को कैसे आज़माएं और पता चलता है। नेट पेज तकनीकी रूप से कार्यान्वित किया गया है, जिसे मैं ढूंढने के लिए संघर्ष कर रहा हूं।

मेरे विचार आज तक हैं कि यह निम्नलिखित से संबंधित हो सकता है;

  • अनुरोध वीईआरबी प्रकार जीईटी के बजाय POST है।
  • व्यूस्टेट जानकारी वाले छिपे हुए इनपुट में कोई जानकारी मौजूद नहीं है और इसलिए पहले सबमिट की गई नियंत्रण जानकारी उपलब्ध नहीं है।
  • अनुरोध शीर्षलेख में http रेफरर वर्तमान यूआरएल जैसा ही है।

क्या कोई भी IsPostback बूलियन संपत्ति निर्धारित करने के लिए उपयोग की जाने वाली स्थितियों का वास्तविक टूटना प्रदान कर सकता है?

नोट: मैं धारणाओं/सिद्धांत के बजाय वास्तविक कार्यान्वयन की तलाश में हूं क्योंकि मैं इस मुद्दे को सक्रिय रूप से हल करने के लिए इसका उपयोग करने की उम्मीद कर रहा हूं। मैंने एमएसडीएन की खोज भी की है और आज तक कोई भी तकनीकी लेख सटीक रूप से तंत्र को कवर नहीं कर सकता है।

अग्रिम धन्यवाद, ब्रायन।

उत्तर

13

पृष्ठ __PREVIOUSPAGE फ़ॉर्म मान के अस्तित्व को देखता है।

परावर्तक से

:

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

परावर्तित आउटपुट के लिए धन्यवाद, ऊपर की ओर। मुझे लगता है कि मैं अभी भी एक और अधिक निश्चित अभी तक उच्च स्तर के विवरण की तलाश में हूं। यह मुझे वास्तविक संपत्ति कार्यान्वयन दिखाता है लेकिन यह पता नहीं चलता है कि एएसपी .NET IsPostback निर्धारित करने के लिए ब्राउज़र अनुरोध के साथ कैसे इंटरैक्ट करता है। एक उदाहरण "this._pageFlags [8]" है, यह समग्र तंत्र के संदर्भ में विशेष रूप से क्या मायने रखता है? –

+0

मैंने टिप्पणी जोड़ा। –

+0

शानदार, इसके लिए धन्यवाद। अपने आप को और प्रेस्कॉट दोनों ने समय की सराहना की है। –

4

पोस्टबैक वास्तव में (अधिकांश भाग के लिए) के लिए ही फ़ॉर्म सबमिट करके काफी बस काम करता है। जावास्क्रिप्ट कोड वास्तव में आपके पृष्ठ पर डाला जाता है:

<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(); 
    } 
} 

अंक उत्तर आपको चलाए गए सर्वर साइड कोड दिखाता है।

+0

धन्यवाद, जो मेरी समझ के साथ थोड़ा और मदद करता है। –

1

है पोस्टबैक इस तरह के (परावर्तक का उपयोग) के रूप में कार्यान्वित किया जाता है:

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); 
} 

तो जब तक आप खाते में इन सभी मापदंडों लेते हैं, यह संभव है कि यह पता लगाने के लिए नहीं किया जाएगा।

संबंधित मुद्दे