32

加载特定更新面板后,如何调用客户端 javascript 方法?

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler)对我不起作用,因为这将在任何更新面板完成加载后触发,而且我找不到客户端方法来查找哪个是

ScriptManager.GetCurrent(Page).AsyncPostBackSourceElementID AsyncPostBackSourceElementID对我不起作用,因为这是一个服务器端对象,我想要客户端

ClientSide .Net 框架必须知道它正在更新哪个 UpdatePanel 才能更新正确的内容。肯定有办法参与这个事件吗?

任何帮助,将不胜感激。

4

3 回答 3

48

谢谢 - 两个很好的答案。最后我使用了客户端脚本“pageloaded”。这是谷歌没有向我透露的一种相当隐蔽的方法。对于那些感兴趣的人,此代码与 FireBug 一起使用,提供了一个很好的 PageLoaded 方法的演示,用于查找更新的面板:

<script type="text/javascript">
        $(document).ready(function() {
            panelsLoaded = 1;
            Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoaded)
        });

        function PageLoaded(sender, args) {
            console.log("I have occured " + panelsLoaded++ + " times!");

            var panelsCreated = args.get_panelsCreated();
            for (var i = 0; i < panelsCreated.length; i++) {
                console.log("Panels Updating: " + panelsCreated[i].id);
            }

            var panelsUpdated = args.get_panelsUpdated();
            for (var i = 0; i < panelsUpdated.length; i++) {
                console.log("Panels Updating: " + panelsUpdated[i].id);
            }
        }
    </script>
于 2008-12-03T23:20:07.433 回答
13

您可以挂钩PageRequestManager.beginRequest事件并检查BeginRequestEventArgs.postBackElement属性。

请注意,它并没有真正为您提供 UpdatePanel,而是 UpdatePanel 内部的控件。不过,这应该足够好了。

编辑:更好的是,PageRequestManager.pageLoaded事件为您提供PageLoadedEventArgs.panelsUpdated(和panelCreated)属性。

于 2008-12-03T21:42:29.860 回答
1

这可能是您的解决方案。

在 UpdatePanel 的 OnLoad 事件背后的代码中,注册一个启动脚本。

string scriptText = "alert('Bar!');";

ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "foo", scriptText, true);
于 2008-12-03T21:41:02.687 回答