繁体   English   中英

在动态添加的服务器控件上注册javascript资源

[英]Register javascript resource on a dynamically added server control

我创建了一个ASP.Net服务器控件,让我们称它为“的WebGrid”。 该控制的WebGrid有它与任何的网页托管它的使用ScriptManager注册一个嵌入的JavaScript资源。

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);

        ClientScriptManager scriptManager = this.Page.ClientScript;
        scriptManager.RegisterClientScriptResource(typeof(WebGrid), "Atl.Core.Resources.Scripts.WebGrid.js");
    }

我还确保WebGrid.js文件是嵌入式资源,方法是将文件的构建操作属性更改为“Embedded Resource”,并将资源添加到项目的AssemblyInfo.cs中:

[assembly: WebResource("Atl.Core.Resources.Scripts.WebGrid.js", "text/js")]

现在,当控制在JavaScript资源使用ScriptManager注册的aspx页面的标记声明,一切工作正常。 但是,如果我通过按钮动态地将控件添加到Page的ControlCollection,则单击javascript不会注册,控件抱怨无法找到这样的javascript函数。 请注意这两个按钮和的WebGrid位于不同的UpdatePanel ...

编辑:看来这个问题是因为我使用的ClientScript与ScriptManager的看到( 的ScriptManager和ClientScript之间的差异用于执行JS什么时候? )。 所以,我怎么然后注册与页面的ScriptManager的的WebGrid的脚本?

所以我想通了。 答案很简单。 在控件PreRender事件处理程序中,只需在ScriptManager类上调用静态RegisterClientScriptResource方法。 我很困惑,因为我认为我需要引用页面上的物理ScriptManager! 不。 您仍然需要将脚本设置为嵌入式资源,并在Assembly.cs文件中添加WebResource属性。

    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);

        ScriptManager.RegisterClientScriptResource(this, typeof(ScriptTest), "Atl.Core.Resources.Scripts.ScriptTest.js");
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM