2010-05-27 16 views
5

Sto usando Javascript per creare un elemento DIV e aprire una nuova pagina utilizzando onclientclick. Funziona alla grande Ora, ho bisogno di scriverlo dal lato server e questo elemento deve essere creato prima di essere posticipato.Come eseguire una funzione javascript prima del postback del pulsante asp.net?

Come si avvia il javascript prima del postback?

Attualmente, devo premere il pulsante due volte perché l'elemento non esiste per scrivere anche al primo clic.

Per essere chiari, ho bisogno di questo per eseguire prima "OnClick" del pulsante.

Aggiornamento: Sembra che la funzione Javascript venga chiamata prima del postback ma l'elemento non viene aggiornato finché non eseguo il secondo postback. Hmm

Aggiornamento: Sfortunatamente è un po 'più complicato di questo.

Sto creando un tag div in javascript per aprire una nuova finestra. All'interno del tag div, sto usando una sintassi del databinding <% = Preview%> così posso accedere a questo elemento sul lato server. Dal lato server, sto iniettando il codice.

Sto pensando che questo potrebbe essere un problema di uovo di gallina ma non è sicuro.

AGGIORNAMENTO!

Non è il Javascript che non è in esecuzione per primo. È il meccanismo di associazione che sta leggendo la variabile vuota prima che io sia in grado di impostarlo.

Hmm

+0

Stai creando dinamicamente un elemento su una pagina che stai inviando e quindi hai bisogno di leggere i dati che hai inviato al server? – R0MANARMY

+0

Potrebbe essere utile pubblicare un esempio molto semplice di ciò che stai cercando di fare. Dalla lettura della tua domanda mi sembra che potresti utilizzare un pannello di aggiornamento per generare il contenuto dinamico del tuo div. –

risposta

0

inserisci qui il codiceQuesto funzionerà per te?

Javascript

function stuffYouWantToDo(){ 
    //do your stuff 
    //then submit the .NET form 
    document.forms[0].submit(); 
} 

codice .NET

<asp:button ID="Button1" onClientClick="return false;stuffYouWantToDo();"/> 

Ciò dovrebbe garantire che le cose che vuoi fare è fatto, allora sarà presentato il modulo. Il ritorno false impedisce di inviare il modulo quando si fa clic sul pulsante per la prima volta e si affida alla chiamata nella funzione stuffYouWantToDo per inviare il modulo.

+0

Il ritorno falso funzionerà davvero così? Penserei che nulla sarebbe eseguito dopo il ritorno falso. Penso che event.stopPropagation() sarebbe un approccio migliore. –

+0

err, potrebbe avere quelli all'indietro. stuffYouWantToDo(); restituisce falso; – Tommy

1

non è necessario affidarsi ai controlli server per eseguire i postback in asp.net. puoi ottenere un controllo più preciso della tua app pubblicando da javascript quando sei pronto ..

il framework auto genera una funzione chiamata __doPostback (.....) e alla fine la chiama ogni volta che ha bisogno di fare un postback.

così. invece di usare il pulsante di controllo server, puoi avere un normale <button onclick="foo()" /> di quando hai finito di eseguire tutto ciò che ti serve, basta chiamare la funzione __doPostback.

asp.net offre un modo elegante per accedere a tale funzione con la pagina .GetPostbackClientEvent (credo, ma ci sono metodi di coppia che supportano questa metodologia) http://msdn.microsoft.com/en-us/library/system.web.ui.page.getpostbackclientevent.aspx

0

Se si desidera utilizzare jQuery è possibile effettuare le seguenti operazioni:

$(document).ready(function() { 

    var execScript = $(".myButton").attr("href").replace("javascript:", ""); 

    $(".myButton").attr("href", "#").click(function() { 
     // Add before click logic here 

     eval(execScript); 
    }); 
}); 
-1

Potrebbe non è sufficiente aggiungere un validatore personalizzato da qualche parte nella tua forma?

+0

non è un validatore. Sto cercando di creare una pagina di anteprima in una nuova finestra. –

Problemi correlati