2008-11-19 8 views
5

Estoy tratando de cargar código javascript con un control web de usuario en una página mediante el método Page.LoadControl durante una publicación asyncron detrás de un panel de actualización.ASP.NET inyectar javascript en control de usuario anidado en el panel de actualización

He intentado especialmente con ese escenario los métodos diseñados de scriptmanager, pero el javascript simplemente no se devuelve al usuario.

Para explicar mi situación un poco mejor:

página maestra tiene el gestor de guión y una página se carga el control de usuario a través de Page.LoadControl método durante un puesto asíncrono espalda. El control personalizado inyecta en el controlador de eventos de prerender el javascript. ¿Es una cuestión de tiempo para inyectar js o simplemente no es posible hacerlo?

Espero que alguien tenga una idea para eso. gracias montones de antelación, derSteve

Respuesta

3

Para que usted puede hacer

string scr; 
scr = "<script src='/scripts/myscript.js'></script>" 
Page.ClientScript.RegisterStartupScript(GetType(Page), "key", scr, false) 

HTH

2

Que su tratado

Page.ClientScript.RegisterStartUpScript(GetType(Page), "key", <your script here>, addSctiptTags:=true) 

Hacemos esto en nuestros controles de usuario y funciona para nosotros

HTH

2

se puede utilizar el método de RegisterStartupScript de la clase ScriptManager para inyectar script ejecutable:

public partial class WebUserControl : System.Web.UI.UserControl 
{   
    protected void Page_PreRender(object sender, EventArgs e) 
    { 
     ScriptManager.RegisterStartupScript(this, GetType(), ClientID, "alert(1)", true); 
    } 
} 
+2

Me parece que esto solo funciona con las devoluciones de datos sincrónicas, no con las devoluciones de datos de UpdatePanel asincrónicas. ¿Me estoy perdiendo de algo? –

3

Si no desea codificar el JavaScript, pero en lugar de incluir desde un archivo, llame ScriptManager.RegisterClientScriptInclude y luego llamar a su función de inicialización en ScriptManager.RegisterStartupScript.

protected void Page_Load(object sender, EventArgs e) 
{ 
    ScriptManager.RegisterClientScriptInclude(
     this, GetType(), "formatterScript", ResolveUrl("~/js/formatter.js")); 
    ScriptManager.RegisterStartupScript(
     this, GetType(), "formatTableFunction", "formatTable()", true); 
} 
1

Poner el RegisterStartupScript en caso Page_PreRender puede no funcionar si su control está anidado en una ventana emergente de asp.net modal. En su lugar, colóquelo en Page_Load cuando IsPostBack = False.

Cuestiones relacionadas