【问题标题】:How do I get Javascript to run after an update panel has updated如何在更新面板更新后运行 Javascript
【发布时间】:2011-11-01 16:20:55
【问题描述】:

我想了解如何在更新面板完成更新后运行客户端 JavaScript 给定各种约束。我的开发场景并不简单,但是我想通过描述一个更简单的案例来说明这个问题。

我有一个用户控件,其中包含一个更新面板,其中包含一个按钮和一个表格。当用户单击按钮时,会发生异步回发,表的行将被更改,更改后的表将被返回并呈现在客户端上。

我想运行一个脚本来对表格执行一些自定义格式设置。让我们说现在我想给桌子加上斑马条纹。 (实际要求更复杂)。

我认为我可以简单地将脚本作为用户控件输出的一部分发出,并且每当发生更新时,表格标记和脚本都会在客户端上处理,一切都会好起来的,但这种技术不起作用。

我看过其他引用 ClientScriptManager 的帖子,但在我的用户控件中似乎没有。我应该添加一个 ScriptManagerProxy 吗?

那么,考虑到限制,最好的方法是什么。

  • 更新面板位于用户控件内。
  • 页面上可能有多个用户控件实例。

看来我需要

  • 为用户控件的每个实例生成一个唯一的更新脚本。
  • 想办法“注册”每个脚本
  • 想办法在相应的 updatePanel 完成更新后请求脚本运行。

我似乎看到了很多相近的例子,但没有一个符合我的情况;我不知道如何将它们组合在一起。

【问题讨论】:

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


    【解决方案1】:

    您必须为它编写 EndRequestHandler。 这是一个非常常见的问题,Javascript,Jquery 在从更新面板异步回发后停止工作。 在这个链接中,我已经解释了如何做到这一点。 http://codethatworkedforme.blogspot.com/2011/08/having-issues-with-update-panel.html

    【讨论】:

    • 必须使用类似于“codethatworkedforme”文章中所做的技术,因为一旦我将 UI 元素包装在用户控件中,仅靠 RegisterStartupScript 是不够的。跨度>
    【解决方案2】:
    • 对于每个用户控件实例的唯一更新脚本,您可以试试这个

      function yourFunctionName<%= ClientID %>() {
         //do something
      }
      
    • 你可以使用这个在服务器端的按钮客户端事件处理程序中调用客户端脚本

      protected void btn_click(object sende, EventArgs e) {
          ScriptManager.RegisterStartupScript(this, this.GetType(),
                  Guid.NewGuid().ToString(),
                  string.Format("yourFunctionName{0}();", ClientID),
                  true);
      }
      

    【讨论】:

    • 调用RegisterStartupScript会不会导致注册脚本的堆积?
    • 我正在尝试一些简化的代码;单页,单更新面板,没有用户控件,内嵌脚本等。似乎在 IE8 中工作,但在 Firefox 6 中不工作。奇怪。在 Firefox 6 中,ajax 部分工作,但脚本没有被触发。奇怪。
    • 当我将代码从主页移动到用户控件时不起作用。仍在调查中。
    猜你喜欢
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 2010-11-12
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    相关资源
    最近更新 更多