我有一个用户控件,例如可以在 gridview itemtemplate 中使用,这意味着该控件可能会或可能不会在页面加载时出现在页面上。在控件位于项目模板内的情况下,我将通过异步回发(通过更新面板)弹出网格视图。
控件本身是注册器脚本块,因为它依赖于 javascripts。首先我用
Page.ClientScript.RegistrerClientScriptBlock
但这不适用于异步回发(更新面板),因此我随后尝试使用 ScriptManager 进行相同操作,它允许我在异步回发后在页面上注册脚本。伟大的!。
ScriptManager.RegisterClientScriptBlock
但是,ScriptManager(我所知道的)没有查看脚本是否已经在页面上的功能,所以我将为每个回发生成脚本块的副本,这当然是不受欢迎的行为。
我在 Google 上进行了一次运行,发现我可以调用 PageRequestManager 的 Dispose() 方法,这确实有效,因为它清除了脚本然后再次添加它们(这也解决了我从删除中删除未使用的脚本块的问题控制)。
Sys.WebForms.PageRequestManager.getInstance().Dispose()
但是,自从我在这里发帖以来,当然有一个缺点:)。Dispose() 方法也会在母版页上处理实例,这导致在那里运行的脚本将在异步回发后停止运行(例如 updateprogress)。
那么,有没有办法使用 ScriptManager 或任何其他工具检查页面上是否已经存在脚本,这会阻止我插入重复的脚本?此外,有没有办法删除某些脚本块(例如,当我删除 itemtemplate 中的项目时)。
提前非常感谢。