以下代码行位于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方法但结果相同。)
答案 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>