我有一个用户控件,可以用在例如网格视图项目模板中,这意味着在页面加载时,控件可能在页面上,也可能不在页面上。在控件位于itemtemplate内的情况下,我将通过异步回发(通过updatepanel)弹出网格视图。
控件本身注册脚本块,因为它依赖于javascripts。首先,我使用
Page.ClientScript.RegistrerClientScriptBlock但这在异步回发(Updatepanel)上不起作用,所以我使用ScriptManager尝试了同样的方法,它允许我在异步回发之后在页面上注册脚本。太棒了!。
ScriptManager.RegisterClientScriptBlock然而,ScriptManager (据我所知)没有查看脚本是否已经在页面上的功能,所以我将为每个回发生成脚本块的副本,这当然是不受欢迎的行为。
我在谷歌做了一次运行,发现我可以调用PageRequestManager的Dispose()方法可以使用,这是可行的,因为它清除了脚本,然后再次添加它们(这也解决了我从删除的控件中删除未使用的脚本块的问题)。
Sys.WebForms.PageRequestManager.getInstance().Dispose()然而,当然也有不利的一面,因为我在这里发布了:)。Dispose()方法也在母版页上部署实例,这导致在那里运行的脚本在异步回发(例如updateprogress)后将停止运行。
那么,有没有一种方法可以使用ScriptManager或任何其他工具来检查页面上是否已经存在脚本,从而防止我插入重复的脚本?另外,有没有一种方法可以删除某些脚本块(例如,当我删除itemtemplate中的项时)。
首先,非常感谢你。
发布于 2010-05-28 18:46:42
如果您在注册时设置了相同的类型和键属性,那么我认为SM将只包含其中的一个。
发布于 2012-07-12 19:47:16
尝试如下所示的函数:
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 Subhttps://stackoverflow.com/questions/2928263
复制相似问题