部分回发后,RegisterClientScript代码无法正常工作

时间:2011-07-11 14:51:54

标签: javascript asp.net sharepoint-2010 updatepanel

以下代码行位于SharePoint网站的用户控件中。

ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "jquery144", "<script type=\"text/javascript\" src=\"/_layouts/Unicre.Web.RUOnline.Controlos/Scripts/jquery-1.4.4.min.js\"></script>", false);
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "javascriptgeral", "<script type=\"text/javascript\" src=\"/_layouts/Unicre.Web.RUOnline.Controlos/Scripts/javascript.js\"></script>", false);

为什么不起作用?我也无法在响应中生成的HTML中找到相应的脚本标记。

问题与更新面板有关。部分回发后,Javascript停止工作。它不应该与上面的代码一起使用吗?

(我也尝试过RegisterClientScriptInclude方法但结果相同。)

1 个答案:

答案 0 :(得分:7)

这不适用于部分回发。您需要在Page_Load上注册脚本。在用户控件中,附加到Load事件并从该处理程序调用ScriptManager.RegisterClientScriptBlock()。

  

部分回发后,Javascript停止工作

UpdatePanel部分回发是UpdatePanel <div>内容的DOM更新。这意味着先前的内容丢失,因此<div>中包含的内联脚本的状态将失去其状态。

有关详细信息,请参阅here

  

UpdatePanel通过 innerHTML DOM属性在客户端上完成工作。从服务器检索增量,在现有DOM中查找,处理内容,然后通过innerHTML分配新内容。 ...但是内联脚本不能以这种方式工作。将DOM元素的innerHTML设置为包含脚本块的HTML不会导致该脚本执行。

同样,在UpdatePanel更新上调用ScriptManager.RegisterClientScriptBlock()不会像页面加载那样。您可以将<script>元素直接添加到UpdatePanel内容,但不会执行。

<强>更新

您可以在adding an endRequest handler to the PageRequestManager部分回发后调用javascript代码:

<script>
function load() {
   //register the handler
   Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
}
//this handler will execute after a partial postback
function EndRequestHandler(){
   //...arbitrary code...
}
window.onload = load; 
</script>