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

32

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

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler) 对我无效,因为它会在任何更新面板完成加载后触发,而我找不到客户端的方法来确定是哪一个更新面板。

ScriptManager.GetCurrent(Page).AsyncPostBackSourceElementID AsyncPostBackSourceElementID 对我无效,因为这是一个服务器端对象,而我需要的是客户端。

客户端的.NET框架必须知道它正在更新的是哪个UpdatePanel,以便更新正确的内容。肯定有一种方法可以钩入此事件吧?

有任何帮助将不胜感激。

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>

由于某些原因,add_pageLoaded 方法对我来说不存在... :( - bambams
很棒的解决方案,我已经寻找答案有一段时间了。 - Taylor K.

13

1
这可能是您的解决方案。
在UpdatePanel的OnLoad事件的代码后面,注册一个启动脚本。
string scriptText = "alert('Bar!');";

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

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