以下代码行在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方法,但结果相同。)

最佳答案

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



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

有关更多信息,请参见here:



同样,在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>

07-24 16:49