2016-04-27 86 views
0

我创建了一个ASP.Net服务器控件,可以将其称为“WebGrid”。 WebGrid控件具有一个嵌入式JavaScript资源,该资源向任何承载它的页面的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文件被更改的文件的生成操作属性嵌入的资源为“嵌入的资源”,并增加资源,以项目的AssemblyInfo.cs这样:

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

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

编辑:看起来这个问题是因为我使用的ClientScript与ScriptManager的看到(Differences between ScriptManager and ClientScript when used to execute JS?)。那么,我该如何使用Page的ScriptManager注册WebGrid的脚本?

回答

0

所以我想通了。答案很简单。在控制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"); 
    }