在后面的代码中,我注册了一个启动脚本,如下所示:
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。我认为它是真的,因为事件处理程序中的第二个调用会覆盖第一个调用。
有什么想法吗?
答案 0 :(得分:1)
我认为您应该使用IsStartupScriptBlockRegistered()
或IsClientScriptBlockRegistered()
方法检查脚本是否已添加,并且只有在RegisterStartupScript
返回false
时才会感到烦恼。< / p>
答案 1 :(得分:1)
您必须将复杂的“this”和“this.GetType()”参数传递给RegisterStartupScript()
函数的原因是为了确保给定的函数只注册一次。因此,您的代码运行一次,而不是两次。
答案 2 :(得分:1)
页面加载也会在您单击按钮时运行,作为asp.net页面生命周期的一部分,并且它在按钮的事件处理程序之前运行。 因此,当您到达按钮的事件处理程序时,您已在Page Load中注册了该脚本,因此将忽略使用相同(类型,键)对注册另一个脚本的请求。
也许您应该将呼叫从Page Load转移到pag生命周期的后续点,也许是更好的PreRender。