25

有没有办法在 UpdatePanel 进程完成时执行脚本。

我有一个允许“插入”、“复制”和“编辑”记录的页面。这都是在 UpdatePanel 上完成的,以防止页面导航。在页面的其他地方,我想打印一条“flash”消息——比如“您已成功输入一条记录”。它不在 UpdatePanel 附近,我想对消息使用 jQuery 效果,使其在 4 秒后淡出。如何使用 UpdatePanel 发回脚本或在 UpdatePanel 刷新后执行它?我应该将脚本写入 asp:literal 吗?想法?

4

6 回答 6

31

是的:

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

进而:

function endRequestHandler(sender, args)
{
  // Do stuff
}

此处此处的文档。请记住,这将为页面上的每个 AJAX 请求触发。

于 2009-01-06T20:59:33.313 回答
27

这应该可以解决问题:

       <script type="text/javascript">
            var prm = Sys.WebForms.PageRequestManager.getInstance();
            prm.add_beginRequest(BeginRequestHandler);
            prm.add_endRequest(EndRequestHandler);

            function BeginRequestHandler(sender, args) 
            {
                 //Jquery Call
            }

            function EndRequestHandler(sender, args) 
            {
                 //Jquery Call

            }
        </script> 
于 2009-01-06T20:59:37.900 回答
4

这是一篇关于如何使用 ScriptManager 的静态方法 RegisterClientScriptBlock 的文章。试了一下,效果很好。

http://cshaperimage.jeremylikness.com/2009/06/inject-dynamic-javascript-into-aspnet.html

于 2009-11-12T20:49:00.767 回答
3
var requestManager = Sys.WebForms.PageRequestManager.getInstance();
requestManager.add_beginRequest(function () { alert('here1') });
requestManager.add_endRequest(function () { alert(here2') });

资料来源:http ://www.howtositecore.com/?p=36

于 2011-06-23T04:49:11.733 回答
3

Sys.WebForms.PageRequestManager.getInstance() 方法对我也很有效。

我使用了很多包含多个更新面板的页面,并且我了解到即使您不希望更新面板刷新它也会自动触发。因此,在触发事件的函数内部,请确保您具有以下内容:

function BeginRequestHandler(sender, args) {
if (args.get_postBackElement().id == "ID of the Updatepanel") {
// do stuff here
于 2015-06-06T03:49:35.667 回答
2

布鲁诺,

首先,回答您的直接问题。在更新面板调用的回调中,您应该能够使用 RegisterStartupScript 调用来调用 JS 方法。然后在您的 JS 方法中,您将显示消息,然后您可以使用:

setTimeout('$('#myMessage').fadeOut("slow")', 4000);

让它在 4 秒后消失。

更进一步,既然您已经在实现 JavaScript,我会邀请您查看这篇关于 UpdatePanels的文章。如果可能的话,我会尝试发送 Ajax 调用来进行插入、复制和编辑,这将进一步简化您的用户反馈并防止通过网络传输过多的信息。

于 2009-01-06T21:00:28.523 回答