views:

4174

answers:

6

Hi folks,

I'm trying to load javascript code with a user web control into a page via a the Page.LoadControl method during an asyncron post back of an update panel.

I've tried the specially for that scenario designed methods of the scriptmanager, but the javascript just doens't get returned to the user.

To explain my scenario a bit better:

Master Page has the script manager and one page loads the user control via Page.LoadControl-method during an async post back. The custom control injects in the prerender event handler the javascript. Is that a matter of timing to inject the js or is it just not possible to do so?

Hope some one has an idea for that. Heaps thanks in advance, derSteve

+2  A: 

Have your tried

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

We do this in our User Controls and it works for us

HTH

rams
+4  A: 

You can use the RegisterStartupScript method of the ScriptManager class to inject executable script:

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

Hi all,

I've actually tried your suggestion and it works for the case that you inject javascript code. But what about injecting a javascript-file? Let's say I have a corresponding js-file which my custom control needs. How do I inject that in the code?

Thanks to all in advance, derSteve

derSteve
To use a file see my answer.
Even Mien
+2  A: 

For that you can do

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

HTH

rams
+1  A: 

If you don't want to hard-code your JavaScript, but instead include it from a file, call ScriptManager.RegisterClientScriptInclude and then call your initialization function 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);
}
Even Mien
A: 

Putting the RegisterStartupScript in the Page_PreRender event may not work if your control is nested in an asp.net modal popup. Instead, put it in the Page_Load when IsPostBack = False.

cbonelli