2011-11-18 8 views
8

C'è un modo per determinare se un <asp:UpdatePanel /> ha eseguito un postback Ajax simile a come possiamo usare ...Come verificare se UpdatePanel sta postando?

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

... per determinare se un postback da un pulsante di invio è in corso.

sto cercando di individuare le richieste Ajax da jQuery, ma è raccogliendo richieste UpdatePanel pure che voglio escludere per esempio ...

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

risposta

12

Non so se questo funzionerà meglio di soluzione, ma hai provato ?:

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

Mi chiedo se potrei usare "ScriptManager.GetCurrent (Page). IsInAsyncPostBack" su di esso proprio, dal momento che penso che altri controlli da ASP.NET AJAX Extensions potrebbero licenziare la richiesta Ajax che non voglio prelevare. –

+0

Ne vale la pena, suppongo. –

3

provare le seguenti:

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

link utili:

+0

Che potrebbe funzionare ma rileva solo un UpdatePanel specifico, non è vero? Sto cercando una soluzione più "generica" ​​che rilevi qualsiasi UpdatePanel. –

+0

Nessun problema, puoi usare FindControl() per vedere se questo controllo è di tipo UpdatePanel ... Ho aggiornato la mia risposta – sll

9

È possibile controllare se il postback asincrono è stato e se è stato emesso da un pannello di aggiornamento alla ricerca a queste proprietà:

ScriptManager.GetCurrent(Page).IsInAsyncPostback 
ScriptManager.GetCurrent(Page).AsyncPostbackSourceElementID 
Problemi correlati