2009-05-22 14 views
6

Sé que puedo conectarme a los eventos del lado del cliente para ejecutar JavaScript después de cada devolución parcial; Sin embargo, quiero hacer algo como esto:Cómo controlar qué JavaScript se ejecuta después de la devolución de datos parcial de UpdatePanel endRequest?

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

Sé que podría totalmente cortarlo con campos ocultos y corro algo después de cada devolución de datos, pero no debería ser una manera bastante straightfoward de una manera similar a esta.

Respuesta

9

El ejemplo de código específico que está describiendo no funciona con post-backs parciales, ya que ClientScript.RegisterStartupScript() escribe JS en la página durante la fase de construcción de salida del ciclo de vida de la solicitud; mientras que una devolución de datos parcial solo actualiza una porción seleccionada de la página a través de JavaScript (aunque el marcado de toda la página, incluido el script de inicio, se genera en el servidor).

para imitar lo que usted está describiendo, se debe incluir un control literal dentro de su UpdatePanel, y durante la devolución parcial establezca la propiedad Text del panel de contenido a la secuencia de comandos que desea ejecutar:

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

OMI, de una manera más adecuada es utilizar el client-side API for async postbacks registrar un controlador de eventos para funcionar cuando la devolución de datos completa:

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

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

Si necesita pasar la información que se genera durante la devolución de datos en el controlador, puede pasar que a través de campos ocultos y tomar eso desde el DOM en su controlador del lado del cliente.

+0

@Rex Estaba planeando usar campos ocultos y un controlador de eventos que siempre archiva, pero estaba saltando había un mecanismo similar al que describí. Por lo que he encontrado hasta ahora, esta es la única opción. – Mark

+0

@Rex He escrito cómo usé este método para lograr el mismo objetivo. http://fooberry.com/2009/05/25/running-specific-javascript-after-partial-postback/ – Mark

2

This es mucho más elegante, la OMI. aparentemente ASP AJAX llamará a cualquier función JS llamada pageLoad. entonces escriba una función llamada pageLoad y se ejecutará en cada carga de página, incluso después de una actualización parcial.

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> 

Cuestiones relacionadas