ASP.NET - UpdatePanel 和 JavaScript

25

有没有一种方法可以在UpdatePanel处理完成后执行脚本。

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

6个回答

32

是的:

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

然后:

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

文档在这里这里。请注意,这将会对页面上的每个AJAX请求都触发。


28

这应该能解决问题:

       <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> 

1
谢谢。我用它来添加一个旋转器。 - Bryan Legend

4

3
var requestManager = Sys.WebForms.PageRequestManager.getInstance();
requestManager.add_beginRequest(function () { alert('here1') });
requestManager.add_endRequest(function () { alert(here2') });

Source: http://www.howtositecore.com/?p=36


3

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

我经常处理包含多个UpdatePanel的页面,我了解到即使您不希望进行刷新的UpdatePanel也会自动触发此方法。因此,请确保在事件触发时的函数内部有以下类似的内容:

function BeginRequestHandler(sender, args) {
if (args.get_postBackElement().id == "ID of the Updatepanel") {
// do stuff here

2

Bruno,

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

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

让它在4秒后消失。

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


我不相信调用 RegisterStartupScript 可以将 JS 注入 AJAX 回调函数中。 - Robert C. Barth
我正在放弃使用UpdatePanels,转而采用WCF/AJAX通过MS AJAX和jQuery实现。这只是一个旧项目,但我想添加一些UpdatePanels使其更加流畅。 - BuddyJoe

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