2010-12-08 11 views
22

मैंने Request.IsAjaxRequest की कोशिश की लेकिन यह वेबफॉर्म में मौजूद नहीं है। मैं एक JQuery AJAX कॉल कर रहा हूँ। मैं यह कैसे जांचूं कि यह AJAX अनुरोध है या नहीं सी # में?यह जांचने के लिए कि अनुरोध AJAX है या कोडबेंड में नहीं है - एएसपी.नेट वेबफॉर्म

उत्तर

43

को देखो क्या हेडर यह वैकल्पिक रूप से फ़िडलर का उपयोग कर, या द्वारा भेज रहा है सिर्फ क्वेरी स्ट्रिंग में भेज पोस्ट URL निर्धारित करके आप की तरह अपने खुद के विस्तार विधि बहुत बना सकते हैं कर सकते हैं MVC code

ईजी में से एक

public static bool IsAjaxRequest(this HttpRequest request) 
{ 
    if (request == null) 
    { 
     throw new ArgumentNullException("request"); 
    } 

    return (request["X-Requested-With"] == "XMLHttpRequest") || ((request.Headers != null) && (request.Headers["X-Requested-With"] == "XMLHttpRequest")); 
} 

HTHs,
चार्ल्स

संपादित करें: असल कॉलबैक अनुरोध भी कर रहे हैं ajax अनुरोध,

public static bool IsAjaxRequest(this HttpRequest request) 
    { 
     if (request == null) 
     { 
      throw new ArgumentNullException("request"); 
     } 
     var context = HttpContext.Current; 
     var isCallbackRequest = false;// callback requests are ajax requests 
     if (context != null && context.CurrentHandler != null && context.CurrentHandler is System.Web.UI.Page) 
     { 
      isCallbackRequest = ((System.Web.UI.Page)context.CurrentHandler).IsCallback; 
     } 
     return isCallbackRequest || (request["X-Requested-With"] == "XMLHttpRequest") || (request.Headers["X-Requested-With"] == "XMLHttpRequest"); 
    } 
+2

उस अंतिम पंक्ति को 'वापसी अनुरोध ["एक्स-अनुरोधित-साथ"] == "XMLHttpRequest" पर वापस किया जा सकता है || अनुरोध। हेडर ["एक्स-अनुरोधित-साथ"] == "XMLHttpRequest"; ' – mattalxndr

+0

@ mattalxndr - कितना अच्छा रिशेर्पर है;) – Dementic

+0

जोड़ा गया कॉलबैक समर्थन है – user960567

1

आम तौर पर, आपको X-Requested-With शीर्षलेख के लिए परीक्षण करने की आवश्यकता होगी, यह सुनिश्चित करना कि उसका मान 'XMLHttpRequest' है। मैं एक सी # डेवलपर (अभी तक) नहीं कर रहा हूँ, लेकिन एक त्वरित गूगल खोज का कहना है कि सी # में यह कुछ इस तरह चला जाता है:

Request.Headers["X-Requested-With"] == "XMLHttpRequest"; 
4

कोशिश करता है, तो ScriptManager IsInAsyncPostBack जाँच करने के लिए:

ScriptManager.GetCurrent(Page).IsInAsyncPostBack 
+0

हो क्या ajax अनुरोध करता है कि दोनों jQuery ajax से और साथ ही इस तरह के पैनल अद्यतन के रूप में नियंत्रणों से ट्रिगर कर रहे हैं के लिए यह काम करता है? – DotnetDude

+1

मुझे यकीन नहीं है, इसलिए मैंने 'try' लिखा ;-) –

1

हाँ, Request.IsAjaxRequestX-Requested-With के लिए हेडर और क्वेरीस्ट्रिंग को देखता है, लेकिन ऐसा लगता है कि आपका jquery X-Requested-With शीर्षलेख नहीं भेज रहा है।

आप कोशिश करते हैं और

/whatever.aspx?x-requested-with=XMLHttpRequest

+0

JQuery एक्स-अनुरोधित-साथ भेज रहा है, इसलिए यदि मैं प्रति करीम 7 9 हेडर की जांच करता हूं, तो यह काम करता है। लेकिन अनुरोध के आधार पर IsAjaxRequest संपत्ति नहीं है। – DotnetDude

+0

आह, मैं देखता हूं - मैंने सोचा था कि आपका मतलब था कि यह हमेशा झूठा था। आप एएसपीनेट का किस संस्करण का उपयोग कर रहे हैं, और क्या हम सभी को आपकी समस्या को पुन: उत्पन्न करने के लिए कुछ कोड मिल सकता है? – devrooms

0

[WebMethod(EnableSession = true)] वाक्य रचना की तरह यदि आप कोड में निम्नलिखित समारोह लिखने के साथ अपने वर्ग डेकोरेट AJAX कॉल से एक ही फ़ंक्शन के पीछे और कॉल करें, आपको यकीन होगा।

[WebMethod(EnableSession = true)] 
    public static void getData(string JSONFirstData,string JSONSecondData, string JSONThirdData, string JSONForthData, ...) 
    { 
     //code 
    } 
अजाक्स URL में

तरह URL :'/Codebehind.aspx/getData'

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

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