0

在我的asp.net网站,我经常使用下面的方法之前实际添加任何脚本的定制片或注册一个js文件只有一次:注册ClientScriptBlock在多次回发

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

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

在此先感谢。

回答

0

假设你正在使用ASP.Net Web窗体,你可以使用下面的属性,以确保无论是回发与否:

Page.IsPostback()

或者,您可以通过某种标志/饼干/隐藏变量表示这个特定页面不需要任何客户端脚本进行注册。

+0

感谢您的回答。我认为你不了解这个问题。该页面确实需要注册客户端脚本。我只是不想一遍又一遍地做。添加IsPostback检查将导致根本没有客户端脚本。 – Brabbeldas