如果我在第一页上添加客户端脚本块,请加载:
if (this.Page.IsPostBack==false)
{
if (this.Page.ClientScript
.IsClientScriptIncludeRegistered("ctlmyControl")==false)
{
string guidParamToHackBrowserCaching
= System.Guid.NewGuid().ToString();
this.Page.ClientScript.RegisterClientScriptInclude("ctlmyControl"
, ResolveUrl(String
.Format("~/clientScripts/ctlmyControl.js
?par={0}",guidParamToHackBrowserCaching)));
}
}
我是否需要在所有回复中重新注册?
谢谢,
答案 0 :(得分:2)
如果在回发后重新呈现脚本所在页面的实际部分,则为是。如果没有,那么不,事实上,你一定不能或者它可以重复。
更具体地说,如果您正在使用使用部分回发的页面,并且呈现UpdatePanel
需要注册脚本的代码,则不应重新注册它,除非在第一页加载。另一方面,如果页面加载完整回发或初始页面加载,那么必须注册它。 ScriptManager
将在UpdatePanel
的动态内容区域之外插入部分回发的脚本,但它不会考虑可能在之前的回发中呈现的现有脚本。 (这有意义吗?不是真的。但确实如此。)
如果脚本没有以任何方式持久存在,那就是长短,除非它们仍然存在于客户端,因为页面的这一部分没有被重新加载。并且ScriptManager
没有做任何努力来记住已经在页面的静态部分中呈现的内容。因此,如果脚本将呈现的实际位置将在回发上更新(无论是异步还是完整),那么您需要重新注册脚本,否则不需要。
答案 1 :(得分:0)
这取决于脚本的用途,但可能。当您回发时,浏览器中的旧DOM(包括任何脚本)将被销毁,您还将使用新的页面实例。如果您仍然需要将其作为页面的一部分,那么您需要确保它仍然已注册。
另一种方法是将脚本重构为更静态,这样您需要的控件值就是将参数传递给函数。然后你可以使用一个普通的<script
标签,你需要对每个回发做的唯一事情是将控件的id写入一个你可以在调用函数时使用的变量。