0

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

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

Page.ClientScript.RegistrerClientScriptBlock

但这不适用于异步回发(更新面板),因此我随后尝试使用 ScriptManager 进行相同操作,它允许我在异步回发后在页面上注册脚本。伟大的!。

ScriptManager.RegisterClientScriptBlock

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

我在 Google 上进行了一次运行,发现我可以调用 PageRequestManager 的 Dispose() 方法,这确实有效,因为它清除了脚本然后再次添加它们(这也解决了我从删除中删除未使用的脚本块的问题控制)。

Sys.WebForms.PageRequestManager.getInstance().Dispose()

但是,自从我在这里发帖以来,当然有一个缺点:)。Dispose() 方法也会在母版页上处理实例,这导致在那里运行的脚本将在异步回发后停止运行(例如 updateprogress)。

那么,有没有办法使用 ScriptManager 或任何其他工具检查页面上是否已经存在脚本,这会阻止我插入重复的脚本?此外,有没有办法删除某些脚本块(例如,当我删除 itemtemplate 中的项目时)。

提前非常感谢。

4

2 回答 2

1

试试这样的功能:

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
于 2012-07-12T11:47:16.360 回答
0

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

于 2010-05-28T10:46:42.297 回答