2010-02-10 18 views
11

Desidero intercettare eventuali postback nella pagina corrente PRIMA di. Voglio fare alcune manipolazioni personalizzate prima che venga pubblicato un postback. Qualche idea su come farlo?Come intercettare qualsiasi postback in una pagina? - ASP.NET

+0

Si prega di essere più specifico: cosa intendi per "prima del postback"? –

+0

Nei tuoi requisiti dici di voler intercettare un postback * quando * si verifica, ma nei tuoi commenti ai rispondenti dici di volerlo intercettare * prima *. Quale vuoi? Vuoi farlo lato client o lato server? – slugster

+0

Ci scusiamo per la confusione. Modificato la domanda per chiarire Voglio intercettarlo prima che si verifichi. Voglio farlo sul lato server. Tuttavia, potrei essere interessato a sapere come farlo anche dal lato client. – NLV

risposta

20

C'è un paio di cose che puoi fare per intercettare un postback sul client.

La funzione __doPostBack assomiglia a questo:

function __doPostBack(eventTarget, eventArgument) { 
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) { 
     theForm.__EVENTTARGET.value = eventTarget; 
     theForm.__EVENTARGUMENT.value = eventArgument; 
     theForm.submit(); 
    } 
} 

noti che si chiama "theForm.onsubmit()" prima di poter realmente fare il postback. Ciò significa che se si assegna al modulo una funzione jsavascript onsubmit, verrà sempre chiamata prima di ogni postback.

<form id="form1" runat="server" onsubmit="return myFunction()"> 

In alternativa, si può effettivamente ignorare la funzione __doPostBack e sostituirlo con il proprio. Questo è un vecchio trucco che è stato utilizzato in ASP.Net 1.0 giorni.

Questo sostituisce la funzione __doPostBack con la propria, e puoi chiamare l'originale dal tuo nuovo.

+0

Perfetto! Ha funzionato esattamente come voglio io. – NLV

+1

Come può __doPostBack = myFunction(); lavoro? Non dovrebbe essere __doPostBack = myFunction ;? –

0

non sono sicuro, ma penso che siete alla ricerca di ..

if (Page.IsPostBack) 
    { 
    } 
+0

Voglio fare alcune manipolazioni prima che venga pubblicato un postback. Non dopo che il postback è successo. Spero che tu capisca – NLV

1

Page.IsPostBack è tuo amico.

+1

Voglio fare alcune manipolazioni prima che venga pubblicato un postback. Non dopo che il postback è successo. Spero che tu capisca – NLV

1

È possibile verificare un postback in uno degli eventi della pagina per il modulo.

Se si desidera eseguire un'azione sul postback che implica la creazione di controlli o la modifica di viewstate, è possibile che si desideri eseguire un evento precedente come Page_Init.

Prova questo:

protected void Page_Init(object sender, EventArgs e) 
    { 
     if (Page.IsPostBack) 
     { 
      //Check for your conditions here, 

      if (Page.IsAsync) 
      { 
       //also you may want to handle Async callbacks too: 
      } 
     } 
    } 
+0

Voglio fare alcune manipolazioni prima che venga pubblicato un postback. Non dopo che il postback è successo. Spero che tu capisca – NLV

2

Per ottenere il postback prima che una pagina fa, è possibile creare un HttpHandler e implementare la funzione ProcessRequest.

Controllare this Scott Hanselman link per un buon post sul blog su come farlo (incluso il codice di esempio).

+0

Grazie per il link. – NLV

6

Utilizzare le seguenti opzioni

Tutte le opzioni funziona con Ajax-enabled-forme e forme semplici.
restituisce false per annullare inviare entro qualsiasi gestore di invio.

Page.ClientScript.RegisterOnSubmitStatement(Page.GetType(), "submit-handler", "alert(\"On PostBack\");"); 

Equivalente javascript Don 't utilizzare questo codice con il codice precedente contemporaneamente

// Modify your form tag like this 
<form onsubmit="javascript:return submit_handler();" ...> 

// Add this script tag within head tag 
<script type="text/javascript"> 
    function submit_handler() { 
     // your javascript codes 
     // return false to cancel 
     return true; // it's really important to return true if you don't want to cancel 
    } 
</script> 

E se si vuole il controllo completo su __doPostBack messo questo script accanto al tuo tag form

<script type="text/javascript"> 
    var default__doPostBack; 
    default__doPostBack = __doPostBack; 
    __doPostBack = function (eventTarget, eventArgument) { 
     // your javascript codes 
     alert('Bye __doPostBack'); 
     default__doPostBack.call(this, eventTarget, eventArgument); 
    } 
</script> 

Testato con ASP.NET 4.0

Problemi correlati