多次注册脚本

时间:2009-05-26 16:53:25

标签: c# asp.net

在后面的代码中,我注册了一个启动脚本,如下所示:

  string strFunctionName = "ShouldAdd";
  sb.Append(strFunctionName + @"((blnShouldAdd ? "true" : "false") + ", true);");

  ScriptManager.RegisterStartupScript(this, this.GetType(), "shouldAdd", sb.ToString(), true);

这段代码被调用两次,一次在blnShouldAdd评估为false时的页面加载中,以及blnShouldAdd评估为true时按钮的事件处理程序中。

奇怪的是,当我调试代码并进入ShouldAdd JS函数时,该值始终为false。我认为它是真的,因为事件处理程序中的第二个调用会覆盖第一个调用。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我认为您应该使用IsStartupScriptBlockRegistered()IsClientScriptBlockRegistered()方法检查脚本是否已添加,并且只有在RegisterStartupScript返回false时才会感到烦恼。< / p>

答案 1 :(得分:1)

您必须将复杂的“this”和“this.GetType()”参数传递给RegisterStartupScript()函数的原因是为了确保给定的函数只注册一次。因此,您的代码运行一次,而不是两次。

答案 2 :(得分:1)

页面加载也会在您单击按钮时运行,作为asp.net页面生命周期的一部分,并且它在按钮的事件处理程序之前运行。 因此,当您到达按钮的事件处理程序时,您已在Page Load中注册了该脚本,因此将忽略使用相同(类型,键)对注册另一个脚本的请求。

也许您应该将呼叫从Page Load转移到pag生命周期的后续点,也许是更好的PreRender。