首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ScriptManager复制javascript

ScriptManager复制javascript
EN

Stack Overflow用户
提问于 2010-05-28 18:37:51
回答 2查看 2.2K关注 0票数 0

我有一个用户控件,可以用在例如网格视图项目模板中,这意味着在页面加载时,控件可能在页面上,也可能不在页面上。在控件位于itemtemplate内的情况下,我将通过异步回发(通过updatepanel)弹出网格视图。

控件本身注册脚本块,因为它依赖于javascripts。首先,我使用

代码语言:javascript
复制
Page.ClientScript.RegistrerClientScriptBlock

但这在异步回发(Updatepanel)上不起作用,所以我使用ScriptManager尝试了同样的方法,它允许我在异步回发之后在页面上注册脚本。太棒了!。

代码语言:javascript
复制
ScriptManager.RegisterClientScriptBlock

然而,ScriptManager (据我所知)没有查看脚本是否已经在页面上的功能,所以我将为每个回发生成脚本块的副本,这当然是不受欢迎的行为。

我在谷歌做了一次运行,发现我可以调用PageRequestManager的Dispose()方法可以使用,这是可行的,因为它清除了脚本,然后再次添加它们(这也解决了我从删除的控件中删除未使用的脚本块的问题)。

代码语言:javascript
复制
Sys.WebForms.PageRequestManager.getInstance().Dispose()

然而,当然也有不利的一面,因为我在这里发布了:)。Dispose()方法也在母版页上部署实例,这导致在那里运行的脚本在异步回发(例如updateprogress)后将停止运行。

那么,有没有一种方法可以使用ScriptManager或任何其他工具来检查页面上是否已经存在脚本,从而防止我插入重复的脚本?另外,有没有一种方法可以删除某些脚本块(例如,当我删除itemtemplate中的项时)。

首先,非常感谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-28 18:46:42

如果您在注册时设置了相同的类型和键属性,那么我认为SM将只包含其中的一个。

票数 0
EN

Stack Overflow用户

发布于 2012-07-12 19:47:16

尝试如下所示的函数:

代码语言:javascript
复制
Public Sub AddScriptToCompositeScriptSafety(ByRef manager As ScriptManager, ByRef script As ScriptReference)

    For Each item In manager.CompositeScript.Scripts
        If (item.Path = script.Path) Then
            Return
        End If
    Next
    manager.CompositeScript.Scripts.Add(script)

End Sub
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2928263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档