2011-03-23 23 views
16

Básicamente tengo en mi UpdatePanel un literal que genera una matriz de JavaScript basada en un método en mi código subyacente.Llamar a una función de Javascript después de UpdatePanel Postback Issue

No tengo problemas a la hora de cargar mi contenido en la carga de la página. Pero si trato de llevar a cabo una búsqueda para actualizar mi literal javascript array dentro de mi panel de actualización, descubrí que el literal se actualiza en la devolución de datos después de que el javascript ya se haya activado.

Este es un ejemplo básico de lo que tengo:

<script type="text\javascript"> 
function BindMyFunction(itemList) 
{ 
    //Do something 
} 
</script> 

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
<ContentTemplate> 
<!-- Literal containing generated JS array --> 
    <asp:Literal ID="ProfileJavscriptOutput" runat="server"></asp:Literal> 
    <ul id="person-search"> 
    <li><asp:TextBox ID="TxtFirstname" runat="server" Text=""></asp:TextBox></li> 
    <!-- Update Literal onClick --> 
     <li><asp:ImageButton CssClass="searchbtn" ID="ImageButton1" runat="server" OnClick="ImageButton1_Click" /></li> 
    </ul>  
    <!-- Some jCarousel rendered --> 
</asp:UpdatePanel> 

He estado buscando en los siguientes mensajes:

ASP.NET - UpdatePanel and JavaScript

call javascript after updatepanel postback

pero no puedo parece aplicarlo correctamente a mi código.

Funciona bien cuando no uso UpdatePanel. Pero es un requisito para que la posición de la página no se mueva cuando se llevan a cabo las búsquedas.

+0

que se ve el código como antes y lo que es lo que parece después? –

+0

¿Cómo se llama el JavaScript cuando se carga la página completa? –

+11

¿Tu madre nunca te dijo que los paneles de actualización son malos? –

Respuesta

25

puede agregar el siguiente código en el evento Page_Load:

ScriptManager.RegisterStartupScript(Me.rptGridAlbum, rptGridAlbum.GetType, "scriptname", "somejavascript", True) 

Esto disparará el Javascript en su página después de la devolución de llamada AJAX.

MSDN

+0

Sí que funcionó Básicamente llamé a ScriptManager.RegisterStartupScript para obtener los datos iniciales y luego llamé a eso cuando realicé mis búsquedas para actualizar el Javascript. – R100

+19

Lástima que no se proporcionó una explicación mejor de los argumentos. De lo contrario, esta respuesta probablemente tendría más Votos ascendentes –

+2

Si está intentando incluir un archivo javascript completo, tenga en cuenta que el 4º parámetro no es la ruta al archivo, sino contenidos reales de JavaScript. Puede hacer algo como 'File.ReadAllText (Server.MapPath (" ~/Virtual/Path/To/File.js "))' – TJB

0

Puede crear un método simple de servicio web que devuelva la matriz de JavaScript a la página siempre que sea necesario y envolver la llamada a ese servicio web en un método de JavaScript. Invocar el método de javascript para actualizar la matriz en la memoria en el lado del navegador funcionará mejor que esperar que el literal de la matriz js se analice de nuevo en las devoluciones de datos UpdatePanel con éxito.

+0

La actualización de una matriz JS en la devolución de datos de UpdatePanel probablemente se realice mejor utilizando ['ScriptManager.RegisterArrayDeclaration'] (https://msdn.microsoft.com/en-us/library/bb292362%28v=vs.110%29.aspx). – Abel

0
var prm = Sys.WebForms.PageRequestManager.getInstance(); 
if (prm != null) { 
    prm.add_endRequest(function (sender, e) { 
     if (sender._postBackSettings.panelsToUpdate != null) { 
      DisplayCurrentTime(); // here your javascript function 
     } 
    }); 
}; 
Cuestiones relacionadas