以下代码行在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>