2008-09-02 10 views
10

पर लोड हो रहा है, यदि मैं pageLoad() के भीतर जांचने का कोई तरीका ढूंढ रहा हूं, तो यह विधि पोस्टबैक/एसिंक पोस्टबैक या लोड होने की वजह से लोड ईवेंट के दौरान उठाई गई है और पहली बार पहुंचें।आरक्षित फ़ंक्शन पेज के भीतर पृष्ठ पोस्टबैक है या नहीं, यह जांचने के लिए कि क्या ASP.NET AJAX

यह पृष्ठ के पीछे कोड के भीतर Page.IsPostback संपत्ति के समान है।

TIA, रिकी

उत्तर

6

एक तरह से आप ऐसा कर सकता है Application.Init में एक Application.Load हैंडलर सेट अप तार की, तो उस हैंडलर चलाने के बाद ही निकल है। पृष्ठ लोड होने से पहले यह आखिरी बात होनी चाहिए।

2

आप एक छिपा इनपुट आप सर्वर साइड पर एक ज्ञात मान पर सेट है कि अगर यह एक पोस्टबैक/कॉलबैक है हो सकता है - और अपने जावास्क्रिप्ट कि मान की जाँच कर सकते हैं।

उसने कहा, मुझे उम्मीद है कि इसके लिए क्लाइंट-केवल समाधान है।

संपादित करें: @mmattax - मेरा मानना ​​है कि वह क्लाइंट-साइड समाधान की तलाश में है - इसका जावास्क्रिप्ट इसके बराबर है।

2

आप क्या कर सकते हैं Sys.Application कक्षा की लोड घटना तक तार है। फिर आप Sys.ApplicationLoadEventArgs कक्षा की isPartialLoad प्रॉपर्टी का उपयोग कर सकते हैं। मेरा मानना ​​है कि अगर आप एसिंक पोस्टबैक में हैं या नहीं तो आपको बताएंगे।

यह जानने के लिए कि क्या आप एक पोस्ट में हैं, आपको सर्वर साइड कोड में इसे संभालना होगा और क्लाइंट को छोड़ देना होगा।

0

आप अभी भी एसिंक कॉल के दौरान पेज.इस्पोस्टबैक का उपयोग कर सकते हैं।

3

@ डैरेन: उत्तर के लिए धन्यवाद। मैंने इवेंट तर्क ApplicationLoadEventArgs पैरामीटर के रूप में पेजलोड को बनाने की कोशिश की थी (नीचे देखें)। हालांकि this के अनुसार:

लोड ईवेंट को सर्वर पर सभी पोस्टबैक के लिए उठाया जाता है, जिसमें एसिंक्रोनस पोस्टबैक शामिल होते हैं।

जैसा कि आपने संकेत दिया है, isPartialLoad संपत्ति में सभी पोस्टबैक परिदृश्य शामिल नहीं हैं। यह अच्छा होगा अगर ईवेंट तर्क में पोस्टस्टॉप संपत्ति भी शामिल है।

function pageLoad(sender, arg) { 
     if (!arg.get_isPartialLoad()) { 
      //code to be executed only on the first load 
     } 
    } 

@mmattax: मैं उस संपत्ति की तलाश में हूं जिसे क्लाइंट-साइड (जावास्क्रिप्ट) से बुलाया जा सकता है।

0

Application.Init शायद उपयोग करने के लिए एक और उपयुक्त घटना है, यदि आप केवल पहले लोड पर कोड निष्पादित करना चाहते हैं।

0

@ डेव वार्ड: यह सामान्य रूप से काम करेगा। हालांकि, कोड व्यवहार ऑब्जेक्ट पर ईवेंट संलग्न करना है। क्योंकि व्यवहार ऑब्जेक्ट का निर्माण अनुप्रयोग के दौरान होता है। Init, उस घटना से अटैचमेंट अप्रत्याशित व्यवहार का कारण बन जाएगा।

पोस्टइनिट ईवेंट होने पर यह अच्छा होगा।

Sys.Application.add_init(AppInit); 

function AppInit() { 
    Sys.Application.add_load(RunOnce); 
} 

function RunOnce() { 
    // This will only happen once per GET request to the page. 

    Sys.Application.remove_load(RunOnce); 
} 

Application.Init के बाद निष्पादित करेंगे कि:

0

@ डेव वार्ड: रनऑन्स विधि का उपयोग पूरी तरह से काम करता है।यह किसी समस्या को जोड़ने से पहले हैंडलर पहले से मौजूद होने पर पहले जांच करने के लिए वर्कअराउंड किए बिना मेरी समस्या का समाधान करता है।

मैं आपके उत्तर को एक स्वीकृत उत्तर के रूप में चिह्नित करूंगा। एक बार फिर धन्यवाद।

0

यहां हमारा अजाक्स है जो पोस्टबॉस्टबैक के बराबर है जिसे हम थोड़ी देर के लिए उपयोग कर रहे हैं।

public static bool isAjaxRequest(System.Web.HttpRequest request) 
    {//Checks to see if the request is an Ajax request 
     if (request.ServerVariables["HTTP_X_MICROSOFTAJAX"] != null || 
      request.Form["__CALLBACKID"] != null) 
      return true; 
     else 
      return false; 
    }