2009-07-27 9 views
43

Ho una funzione pageLoad che imposta alcuni css su un controllo .ascx che non posso modificare. A caricamento della pagina tutto va bene, ma quando un pannello di aggiornamento aggiorna il controllo, il mio css non viene più applicato. Come posso rieseguire la mia funzione dopo l'aggiornamento della pagina?Come posso eseguire alcuni javascript dopo l'aggiornamento di un pannello di aggiornamento?

$(function() { 
     $("textarea").attr("cols", "30"); 
     $("input.tbMarker").css({ "width": "100px" }).attr("cols","25"); 
    }); 

Questo ovviamente funziona solo sul caricamento iniziale della pagina. Come posso eseguirlo dopo un aggiornamento?

+0

Tie nell'evento MSAjax pageload sul lato client: http://stackoverflow.com/questions/9026496/running-script-after-update-panel-ajax-asp -net – dotnettex

+0

http://stackoverflow.com/a/339114/900284 –

risposta

38

L'aggiunta di un gestore di add_pageLoaded può funzionare anche.

Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoadedHandler); 

Nota: il gestore si attiva per qualsiasi richiamata, ma è possibile utilizzare per filtrare sender._postBackSettings.panelID quando si desidera che la funzione chiamata.

Più campioni:

+0

Questo è fantastico! Inoltre, se non esiste un pannello esplicito (ad esempio, forse stai usando un controllo Telerik che utilizza gli UpdatePanel dietro le quinte), puoi anche usare 'sender._postBackSettings.asyncTarget' per verificare se il postback corrente è quello che stai cercando per. –

13

Durante il postback per il pannello di aggiornamento, nel codice del server, utilizzare ClientScriptManager di aggiungere qualche nuovo script alla pagina, qualcosa di simile:

ClientScriptManager.RegisterStartupScript(
     typeof(page1), 
     "CssFix", 
     "javascriptFunctionName()", 
     true); 

incapsulare il tuo javascript in una funzione chiamata che corrisponde al terzo argomento lì, e dovrebbe essere eseguito quando ritorna il postback.

11

È inoltre possibile associare ad un evento nel codice lato client (JavaScript) ogni volta che un UpdatePanel ha terminato in questo modo:

 Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(){myFunction();}); 

Quindi in questo caso myFunction(); sarà chiamato ogni volta che si è verificato un postback di UpdatePanel. Se si esegue questo codice quando la pagina viene caricata, la funzione verrà richiamata all'ora corretta.

12

Aggiungere il codice nello stesso modulo in cui è stato inserito lo Script Manager.

Codice Dietro:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (ScriptManager1.IsInAsyncPostBack) 
    { 
     StringBuilder sb = new StringBuilder(); 
     sb.Append("<script language='javascript' type='text/javascript'>"); 
     sb.Append("Sys.Application.add_load(func);"); 
     sb.Append("function func() {"); 
     sb.Append("Sys.Application.remove_load(func);"); 
     sb.Append("alert('I am Batman!');"); 
     sb.Append("}"); 
     sb.Append("</script>"); 
     ScriptManager.RegisterStartupScript(this, GetType(), "script", sb.ToString(), false); 
    } 
} 
69

Modo più semplice è quello di utilizzare MSAjax Pageload evento nel codice javascript:

<script> 
    ///<summary> 
    /// This will fire on initial page load, 
    /// and all subsequent partial page updates made 
    /// by any update panel on the page 
    ///</summary> 
    function pageLoad(){ alert('page loaded!') } 
</script> 

ho usato molte volte, funziona come fascino. La cosa più importante è non confonderla con la funzione document.ready (che verrà eseguita solo una volta dopo che la pagina Document Object Model (DOM) è pronta per l'esecuzione del codice JavaScript), tuttavia l'evento pageLoad verrà eseguito ogni volta che il pannello di aggiornamento rinfresca.

Fonte: Running script after Update panel AJAX asp.net

+3

fantastico! Ho cercato da molto tempo un modo per mantenere l'esecuzione di javascript mentre il pannello di aggiornamento si aggiorna, grazie per la tua risposta! – Shide

+1

Ho appena elaborato questa situazione in un progetto: questo è stato il più semplice e affidabile per me. Gli approcci 'add_pageLoaded' e' RegisterStartupScript' erano più difficili da tracciare e eseguire il debug attraverso i callback, ma 'pageLoad' Just Works (tm) – brichins

+0

var firstload = 0; function pageLoad() {if (firstload == 0) firstload = 1; else {alert ('Postback!'); } – mjb

Problemi correlati