ASP.NET在嵌套在更新面板中的用户控件中注入javascript

时间:2008-11-19 10:26:21

标签: asp.net javascript updatepanel custom-server-controls

我正在尝试在更新面板的asyncron回发期间通过Page.LoadControl方法将带有用户Web控件的JavaScript代码加载到页面中。

我已经尝试过专门用于脚本管理器的方案设计方法,但javascript只是不会返回给用户。

更好地解释我的情景:

母版页具有脚本管理器,并且在异步回发期间,一个页面通过Page.LoadControl方法加载用户控件。自定义控件在预渲染事件处理程序中注入javascript。这是注入js的时间问题还是不可能这样做?

5 个答案:

答案 0 :(得分:3)

为此你可以做到

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

HTH

答案 1 :(得分:3)

如果您不想对JavaScript进行硬编码,而是将其包含在文件中,请调用ScriptManager.RegisterClientScriptInclude,然后在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);
}

答案 2 :(得分:2)

试过了吗

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

我们在用户控件中执行此操作,它适用于我们

HTH

答案 3 :(得分:2)

您可以使用ScriptManager类的RegisterStartupScript方法注入可执行脚本:

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

答案 4 :(得分:1)

如果您的控件嵌套在asp.net模式弹出窗口中,则将RegisterStartupScript置于Page_PreRender事件中可能不起作用。相反,当IsPostBack = False时将其放在Page_Load中。