如何在加载特定的UpdatePanel后调用客户端javascript函数

时间:2008-12-03 21:11:51

标签: asp.net javascript ajax updatepanel

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

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

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

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

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:13)

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

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

修改:更好的是,PageRequestManager.pageLoaded事件会为您提供PageLoadedEventArgs.panelsUpdated(以及panelsCreated)属性。

答案 2 :(得分:1)

这可能是您的解决方案。

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

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

ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "foo", scriptText, true);