0

在我的 asp.net 网站中,在实际添加自定义脚本或注册 js 文件之前,我经常使用以下方法:

IsClientScriptBlockRegistered(Type, String)

IsClientScriptIncludeRegistered(Type, String)

当一个页面需要一段自定义脚本时,在 PageLoad 期间的某个地方我调用IsClientScriptBlockRegisterd()后跟RegisterClientScriptBlock().

if (!Page.ClientScript.IsClientScriptBlockRegistered(typeof(Page), "myKey"))
{
  // Start creating ScriptBlock //
  // .. //

  // Actually Register the script //
  ToolkitScriptManager.RegisterClientScriptBlock(this, typeof(Page), "myKey", 
    sbScript.ToString(), false);
}

上面的代码在回发期间总是被调用一次。

当用户在相关页面上时,在该页面上停留时,他可能会导致多次回发(实际回发,而不是回调)。在回发期间,该GetRegisteredClientScriptBlocks方法总是返回一个空集合。所以IsClientScriptBlockRegistered总是返回false。因此,对于每个回发,我必须重新创建自定义脚本块并将其重新注册到页面,然后将其重新发送给客户端。

只要用户停留在相关页面上,或者只要用户会话处于活动状态,有没有办法注册自定义脚本块并让它在客户端存在?

提前致谢。

4

1 回答 1

0

假设您使用的是 ASP.Net WebForms,您可以使用以下属性来确保它是否是回发:

Page.IsPostback()

或者,您可以传递某种标志/cookie/隐藏变量,指示此特定页面不需要注册任何客户端脚本。

于 2014-04-04T07:31:17.513 回答