在多个回发期间仅注册一次ClientScriptBlock

时间:2014-04-04 06:51:03

标签: c# asp.net registerclientscriptblock clientscript clientscriptmanager

在我的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。因此,对于每个回发,我必须重新创建自定义脚本块并将其重新注册到页面,然后将其重新发送到客户端。

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

Page.IsPostback()

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