当更新面板刷新时如何执行JavaScript(无法让Sys.WebForms.PageRequestManager.getInstance().add_endRequest()起作用)

5

我正在尝试在更新面板刷新后运行JavaScript。我已经阅读了一些相关资料,可以使用类似于以下代码的代码:

function codeToRun() {
    //Code Here
}

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(codeToRun);

但似乎它没有起作用…… 有什么想法吗?我已经尝试将代码放在更新面板的内容区域内以及外部...到目前为止都没有成功。请让我知道为什么会发生这种情况,谢谢。
谢谢, 马特

2
转向MVC的第1827个理由。不过这是个好问题,因为我很不幸仍然被困在WebForms的泥潭中。 - MrBoJangles
2个回答

7

请将所有内容放在UpdatePanel之外:

标记:

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>

脚本:

if( typeof(Sys) != "undefined" )
{
    Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(initRequestHandler);     
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);   
}
else
{
    //we have a problem with ScriptManager
}

由于我们在后端使用了 'System.Web.UI.ScriptManager.RegisterStartupScript()',而不是 ScriptManager 标签,因此我直接省略了 ScriptManager 标签,并在上面使用了 add_endRequest() 部分,结果运行良好。太酷了! - MrBoJangles

0

System.WebForms.PageRequestManager 的调用应该在库被包含和初始化之后进行,但可能不应该在 UpdatePanel 内部进行。


你如何包含并初始化它? - Matt
@Matt 当您将ScriptManager和UpdatePanels添加到页面时,它就被包含在内了-如果没有它们,它们将无法工作,因此这是一种验证它们是否存在的简单方法:)。它们通常位于<body>标记的顶部附近。 - Rex M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接