2011-08-23 110 views
3

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

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

我想运行一个脚本在表上执行一些自定义格式。让我们说现在我想斑马条纹表。 (实际需求比较复杂)。

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

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

那么考虑到约束条件,最好的方法是什么?

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

看起来我需要

  • 为用户生成控制的一个惟一的更新脚本。
  • 找到一种方法来“注册”每个脚本
  • 找到一种方法来要求脚本在相应的updatePanel完成更新时运行。

我似乎已经看到很多很接近但没有符合我的情况的例子;我无法弄清楚如何把它们全部结合在一起。

回答

1

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

+0

不得不使用类似的技术到做我在“codethatworkedforme”文章中,就像我曾经把用户界面元素包装在用户控件中一样,RegisterStartupScript本身还不够。 – IanT8

0
  • 为用户控件的一个惟一的更新脚本,你可以试试这个

    function yourFunctionName<%= ClientID %>() { 
        //do something 
    } 
    
  • 可以使用调用客户端脚本按钮客户envent处理器在服务器端这

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

调用RegisterStartupScript是否会导致注册脚本的积累? – IanT8

+0

我正在试验一些简化的代码;单页面,单个更新面板,没有用户控制,内嵌脚本等。似乎在IE8中工作,但不是Firefox 6. Wierd。在Firefox 6中,ajax部分有效,但脚本没有被解雇。奇怪的。 – IanT8

+0

将代码从主页面移动到用户控件时不起作用。仍在调查。 – IanT8