2008-11-19 8 views
5

J'essaie de charger le code javascript avec un contrôle Web utilisateur dans une page via la méthode Page.LoadControl lors d'un post asynchrone d'un panneau de mise à jour.ASP.NET injecter javascript dans le contrôle de l'utilisateur imbriqué dans le panneau de mise à jour

J'ai essayé les méthodes spécialement conçues pour ce scriptmanager, mais le javascript n'est tout simplement pas retourné à l'utilisateur.

Pour expliquer mon scénario un peu mieux:

maître page a le gestionnaire de script et une page charge le contrôle de l'utilisateur via Page.LoadControl méthode lors d'un post async retour. Le contrôle personnalisé injecte dans le gestionnaire d'événements prerender le javascript. Est-ce une question de timing pour injecter le JS ou est-ce que ce n'est tout simplement pas possible de le faire?

J'espère que quelqu'un a une idée pour cela. Heaps merci à l'avance, derSteve

Répondre

3

Pour que vous pouvez faire

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

HTH

2

Avez-vous essayé

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

Nous le faisons dans nos contrôles utilisateur et il fonctionne pour nous

HTH

2

Vous pouvez utiliser la méthode RegisterStartupScript de la classe ScriptManager pour injecter le script exécutable:

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

Je trouve que cela ne fonctionne qu'avec les publications de publication synchrones, pas avec les mises à jour post-périodiques asynchrones. Est-ce que je manque quelque chose? –

3

Si vous ne voulez pas coder en dur votre JavaScript, mais plutôt inclure à partir d'un fichier, appelez ScriptManager.RegisterClientScriptInclude puis appelez votre fonction d'initialisation au 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

Mettre le RegisterStartupScript en cas de Page_PreRender peut ne pas fonctionner si votre contrôle est imbriqué dans un popup modal asp.net. Au lieu de cela, placez-le dans le Page_Load lorsque IsPostBack = False.