【问题标题】:ASP.NET - UpdatePanel and JavaScriptASP.NET - UpdatePanel 和 JavaScript
【发布时间】:2010-09-29 21:42:55
【问题描述】:

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

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

【问题讨论】:

    标签: asp.net asp.net-ajax updatepanel


    【解决方案1】:

    是的:

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

    然后:

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

    文档herehere。请记住,这将针对页面上的每个 AJAX 请求触发。

    【讨论】:

      【解决方案2】:

      这应该可以解决问题:

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

      【讨论】:

      • 谢谢。我用它来添加一个微调器。
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:
        var requestManager = Sys.WebForms.PageRequestManager.getInstance();
        requestManager.add_beginRequest(function () { alert('here1') });
        requestManager.add_endRequest(function () { alert(here2') });
        

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

        【讨论】:

          【解决方案5】:

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

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

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

          【讨论】:

            【解决方案6】:

            布鲁诺,

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

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

            让它在 4 秒后消失。

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

            【讨论】:

            • 我不相信对 RegisterStartupScript 的调用可以将 JS 注入到 AJAX 回调中。
            • 我正在远离 UpdatePanels,并通过 MS AJAX 和 jQuery 转向 WCF/AJAX。这只是一个有效的旧项目,但我想我会添加一些 UpdatePanel 以使其更流畅。
            猜你喜欢
            • 2011-09-15
            • 2010-12-18
            • 1970-01-01
            • 2012-12-05
            • 2010-12-29
            • 2011-01-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多