2010-12-08 5 views

Respuesta

43

Se puede crear su propio método de extensión muy parecido el que está en el MVC code

Por ej.

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,
Carlos

Edit: solicitudes realidad de devolución de llamada son también peticiones 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

Esa última línea se puede refactorizar a 'solicitud de devolución [" X-Requested-With "] ==" XMLHttpRequest "|| request.Headers ["X-Requested-With"] == "XMLHttpRequest"; ' – mattalxndr

+0

@mattalxndr - qué bueno es el reajuste;) – Dementic

+0

agregado es el respaldo de devolución de llamada – user960567

1

En general, deberá comprobar el encabezado X-Requested-With, asegurándose de que su valor sea 'XMLHttpRequest'. No soy un desarrollador de C# (aún), pero una rápida búsqueda en Google dice que en C# que es algo como esto:

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

tratar de comprobar si el ScriptManager IsInAsyncPostBack:

ScriptManager.GetCurrent(Page).IsInAsyncPostBack 
+0

se encarga de ello peticiones Ajax que se activan tanto desde jquery ajax, así como de controles tales como paneles de actualización? – DotnetDude

+1

No estoy seguro, por lo tanto escribí 'try' ;-) –

1

Sí, Request.IsAjaxRequest mira los encabezados y la cadena de consulta para X-Requested-With, pero parece que su jquery no está enviando el encabezado X-Requested-With.

Puede tratar de ver lo que las cabeceras se envía mediante el uso de Fiddler, o, alternativamente, simplemente lo envían en la cadena de consulta mediante el establecimiento de la URL POST para

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

+0

JQuery está enviando X-Requested-With así que si verifico los encabezados por Karim79, funciona. Pero allí la Solicitud no tiene una propiedad IsAjaxRequest en la página base. – DotnetDude

+0

Ah, ya veo, pensé que querías decir que siempre fue falso. ¿Qué versión de ASP.net está usando y podríamos ver algún código para reproducir su problema? – devrooms

0

Adorne su clase con [WebMethod(EnableSession = true)] sintaxis como si se escribe la función siguiente en el código de detrás y llamar a la misma función desde la llamada ajax estará seguro.

[WebMethod(EnableSession = true)] 
    public static void getData(string JSONFirstData,string JSONSecondData, string JSONThirdData, string JSONForthData, ...) 
    { 
     //code 
    } 

en la URL Ajax ser como URL :'/Codebehind.aspx/getData'

Cuestiones relacionadas