我一直在留下我的头!我已经使用了MSDN建议的适当重载,只能通过多次异步回发至少渲染一次脚本......这就是我拥有的......发生了什么!!
if (!ScriptManager.GetCurrent(Page).GetRegisteredClientScriptBlocks().Any(x=> x.Key == jscriptKey))
{
// Page.RegisterClientScriptBlock(jscriptKey, "");
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), jscriptKey, sb.ToString(), true);
}
答案 0 :(得分:1)
客户端脚本块注册不会通过任何隐藏机制在ScriptManager中保留。也就是说,如果你看GetRegisteredClientScriptBlocks()
,那么总是在回发后会变空(异步或其他)。但是,尽管ClientScriptManager可能没有意识到脚本已经添加到页面的非异步更新部分,但是当然,在异步回发之后,那里添加的任何内容仍然存在。您需要以某种方式跟踪代码中的注册 - 并使用逻辑仅注册一次。
你的情况如何?你有用户控件或需要注册脚本的东西吗?您可以检查Page.IsPostBack
,只检查它是否不是回发,或者是否不够好(因为控件可以在回发时第一次加载)然后在ViewState中设置一个标志,以便它知道何时它已经注册了它的脚本。