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

Posted

技术标签:

【中文标题】加载特定 UpdatePanel 后如何调用客户端 javascript 函数【英文标题】:How to call a client side javascript function after a specific UpdatePanel has been loaded 【发布时间】:2010-09-25 05:16:28 【问题描述】:

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

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

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

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

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

谢谢 - 两个很好的答案。最后我使用了客户端脚本“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 方法对我来说不存在... :( 很好的解决方案,我一直在寻找这个问题的答案。【参考方案2】:

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

请注意,它真的为您提供 UpdatePanel,而是 UpdatePanel 内部的控件。不过,这应该已经足够了。

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

【讨论】:

【参考方案3】:

这可能是您的解决方案。

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

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

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

【讨论】:

以上是关于加载特定 UpdatePanel 后如何调用客户端 javascript 函数的主要内容,如果未能解决你的问题,请参考以下文章

在我的 UpdatePanel 完成加载其 DOM 元素后,如何从我的代码隐藏中执行 JavaScript?

如何从 JavaScript 更新 UpdatePanel

C# UpdatePanel加载完毕回调JS

在不使用 UpdatePanel 的情况下单击 RadioButtonList 时如何停止页面重新加载?

vs2005开发,用vs2010加载后提示 :创建控件时出错<asp:UpdatePanel>控件 未知的服务标记 AspNetPager

加载特定元素后可以调用函数吗? [复制]