如果有大量后续的异步回发,我将如何只注册一段脚本?请继续阅读

时间:2011-02-18 12:56:55

标签: c# asp.net ajax updatepanel scriptmanager

我一直在留下我的头!我已经使用了MSDN建议的适当重载,只能通过多次异步回发至少渲染一次脚本......这就是我拥有的......发生了什么!!

  if (!ScriptManager.GetCurrent(Page).GetRegisteredClientScriptBlocks().Any(x=> x.Key ==   jscriptKey))
        {
          //  Page.RegisterClientScriptBlock(jscriptKey, "");
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), jscriptKey, sb.ToString(), true);
        }

1 个答案:

答案 0 :(得分:1)

客户端脚本块注册不会通过任何隐藏机制在ScriptManager中保留。也就是说,如果你看GetRegisteredClientScriptBlocks(),那么总是在回发后会变空(异步或其他)。但是,尽管ClientScriptManager可能没有意识到脚本已经添加到页面的非异步更新部分,但是当然,在异步回发之后,那里添加的任何内容仍然存在。您需要以某种方式跟踪代码中的注册 - 并使用逻辑仅注册一次。

你的情况如何?你有用户控件或需要注册脚本的东西吗?您可以检查Page.IsPostBack,只检查它是否不是回发,或者是否不够好(因为控件可以在回发时第一次加载)然后在ViewState中设置一个标志,以便它知道何时它已经注册了它的脚本。