2009-05-22 15 views
6

So che posso collegarmi agli eventi lato client per eseguire JavaScript dopo ogni postback parziale; tuttavia, voglio fare qualcosa di simile:Come controllare quale JavaScript viene eseguito dopo il postback parziale di UpdatePanel endRequest?

protected void FooClicked(object sender, EventArgs e) { 
     ClientScript.RegisterStartupScript(GetType(), "msg", "showMsg('Foo clicked');",true);   
} 

So che potrei assolutamente incidere con campi nascosti ed eseguire qualcosa dopo ogni postback, ma ci dovrebbe essere un modo abbastanza straightfoward per in modo simile a Questo.

risposta

9

L'esempio di codice specifico che si sta descrivendo non funziona con post-back parziali, poiché ClientScript.RegisterStartupScript() scrive JS sulla pagina durante la fase di costruzione dell'output del ciclo di vita della richiesta; mentre un postback parziale aggiorna solo una porzione selezionata della pagina tramite JavaScript (anche se il markup per l'intera pagina, incluso lo script di avvio, viene generato sul server).

di imitare da vicino ciò che si sta descrivendo, si dovrebbe includere un controllo Literal all'interno del UpdatePanel, e durante il postback parziale impostare la proprietà Text del pannello contenuti allo script che si desidera eseguire:

myLiteral.Text = "<script type=\"JavaScript\">doStuff();</script>"; 

IMO, un modo più corretto è quello di utilizzare il client-side API for async postbacks per registrare un gestore di eventi per l'esecuzione quando il postback completa:

function endRequestHandler(sender, args) { 
    doStuff(); 
} 

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler); 

Se è necessario passare le informazioni che è stato generato durante il postback nel gestore, si può passare chetramite i campi nascosti e afferrare quello dal DOM nel gestore client-side.

+0

@Rex stavo pianificando di utilizzare campi nascosti e gestore di eventi che archivia sempre, ma saltellando c'era un meccanismo simile a quello che ho descritto. Da quello che ho trovato finora questa è l'unica opzione. – Mark

+0

@Rex Ho scritto come ho usato questo metodo per raggiungere lo stesso obiettivo. http://fooberry.com/2009/05/25/running-specific-javascript-after-partial-postback/ – Mark

2

This è molto più elegante, IMO. apparentemente ASP AJAX chiamerà qualsiasi funzione JS denominata pageLoad. quindi scrivi una funzione chiamata pageLoad e verrà eseguita su ogni caricamento della pagina, anche dopo un aggiornamento parziale.

1

<script type="text/javascript" language="javascript"> 
    function ValidateUserRole() { 
     var answer = confirm("Are you sure..................") 
     if (answer) { 
      var btnRoleReleatedButton = '<%=btnRoleReleatedButton.ClientID%>'; 
      document.getElementById(btnRoleReleatedButton).click(); 
     } 
     else { 
      return false; 
     } 
    } 
</script> 

Tier 3 :<asp:UpdatePanel ID="upTier3Details" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <asp:DropDownList ID="ddlTier3" runat="server" CssClass="ddlextralarge" Width="350" /> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="ddlUserRole" EventName="SelectedIndexChanged" /> 
    </Triggers> 
</asp:UpdatePanel> 

Problemi correlati