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