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

Posted

技术标签:

【中文标题】ASP.NET 在嵌套在更新面板中的用户控件中注入 javascript【英文标题】:ASP.NET inject javascript in user control nested in update panel 【发布时间】:2010-09-23 00:31:50 【问题描述】:

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

我已经尝试了专门为该场景设计的脚本管理器方法,但 javascript 只是没有返回给用户。

为了更好地解释我的场景:

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

【问题讨论】:

【参考方案1】:

你试过了

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

我们在用户控件中执行此操作,它对我们有用

HTH

【讨论】:

【参考方案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);
    

【讨论】:

我发现这仅适用于同步回发,不适用于异步 UpdatePanel-回发。我错过了什么吗?【参考方案3】:

你可以这样做

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

HTH

【讨论】:

【参考方案4】:

如果您不想对 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);

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于ASP.NET 在嵌套在更新面板中的用户控件中注入 javascript的主要内容,如果未能解决你的问题,请参考以下文章

从另一个控件中的控件刷新 asp.net 页面

Asp.net 按钮 onclick 在更新面板中不起作用

向导控件中的 Gridview 自定义分页在 asp.net 中无法正常工作

下载功能在 asp.net 的更新面板中不起作用

从放置在更新面板外部的控件触发 asp.net 事件

使用弹出控件扩展器 Asp.net 在更新面板内维护滚动位置复选框列表?