2008-11-19 6 views
5

Ich versuche, JavaScript-Code mit einem Benutzer Web-Steuerelement in eine Seite über eine Page.LoadControl-Methode während eines asyncron Beitrags zurück von einem Update-Panel zu laden.ASP.NET injizieren Javascript in Benutzersteuerelement geschachtelt in Update-Panel

Ich habe die speziell für dieses Szenario entworfenen Methoden des Scriptmanagers ausprobiert, aber das Javascript wird nur nicht an den Benutzer zurückgegeben.

Zu meinem Szenario ein bisschen besser zu erklären:

Master-Seite hat den Skript-Manager und eine Seite lädt die Benutzersteuerung über Page.LoadControl-Methode während einer Asynchron-Post zurück. Das benutzerdefinierte Steuerelement injiziert das JavaScript in den Prerender-Ereignishandler. Ist es eine Frage des Zeitpunkts, um die js injizieren oder ist es einfach nicht möglich, dies zu tun?

Hoffe jemand hat eine Idee dafür. Heaps Vielen Dank im Voraus, derSteve

Antwort

3

Dafür können Sie

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

HTH

2

Ihr versucht haben

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

Wir tun dies in unserem User Controls und es funktioniert für uns

HTH

2

Sie die Registerstartup verwenden können Methode Die ScriptManager-Klasse zum Einfügen eines ausführbaren Skripts:

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

Ich finde das funktioniert nur mit synchronen Postbacks, nicht mit asynchronen UpdatePanel-Postbacks. Fehle ich etwas? –

3

tun Wenn Sie JavaScript-Code Fest Ihre wollen nicht, sondern sind aus einer Datei, rufen ScriptManager.RegisterClientScriptInclude und dann Initialisierungsfunktion aufrufen in 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

die Registerstartup im Page_PreRender Ereignisse Putting kann nicht funktionieren, wenn Ihre Steuerung in einem asp.net modalen Popup verschachtelt ist. Setzen Sie es stattdessen in Page_Load, wenn IsPostBack = False ist.