2011-11-18 10 views
8

¿Hay una manera de determinar si un <asp:UpdatePanel /> ha realizado una devolución de datos Ajax similar a cómo podemos utilizar ...¿Cómo comprobar si UpdatePanel está publicando de nuevo?

if(!Page.IsPostBack) { ...snip } 

... para determinar si una devolución de datos desde un botón de envío está teniendo lugar.

Estoy intentando detectar las peticiones Ajax de jQuery, pero se está recogiendo solicitudes UpdatePanel, así que quiero excluir por ejemplo ...

if (Request.IsAjaxRequest() && !Page.IsUpdatePanelPostback) 
{ 
    // Deal with jQuery Ajax 
} 

Respuesta

12

No sé si esto va a funcionar mejor que su solución, pero ¿ha intentado ?:

if (ScriptManager.GetCurrent(Page).IsInAsyncPostBack) 
{ 
    Control ctrl = GetControlThatCausedPostBack(Page); 
    if (ctrl is UpdatePanel) 
    { 
     //handle updatepanel postback 
    } 
} 

private Control GetControlThatCausedPostBack(Page page) 
{ 
    //initialize a control and set it to null 
    Control ctrl = null; 

    //get the event target name and find the control 
    string ctrlName = Page.Request.Params.Get("__EVENTTARGET"); 
    if (!String.IsNullOrEmpty(ctrlName)) 
     ctrl = page.FindControl(ctrlName); 

    //return the control to the calling method 
    return ctrl; 
} 
+0

Me pregunto si podría usar 'ScriptManager.GetCurrent (Page) .IsInAsyncPostBack' en su propia, ya que supongo que otros controles de las Extensiones AJAX de ASP.NET podrían disparar la solicitud de Ajax de que no quiero que me retiren. –

+0

Vale la pena intentarlo, supongo. –

3

Pruebe lo siguiente:

var controlName = Page.Request.Params.Get("__EVENTTARGET"); 
if (!String.IsNullOrEmpty(controlName)) 
{ 
    // Use FindControl(controlName) to see whether 
    // control is of UpdatePanel type 
} 

enlaces útiles:

+0

Eso podría funcionar pero solo detecta un UpdatePanel específico ¿no es así? Estoy buscando una solución más 'genérica' que detecte cualquier UpdatePanel. –

+0

Sin problemas, puede usar FindControl() para ver si este control es de tipo UpdatePanel ... He actualizado mi respuesta – sll

9

puede comprobar si la devolución de datos asincrónica y si fue emitido por un panel de actualización busca en estas propiedades:

ScriptManager.GetCurrent(Page).IsInAsyncPostback 
ScriptManager.GetCurrent(Page).AsyncPostbackSourceElementID 
Cuestiones relacionadas