如何让Javascript在更新面板更新后运行

3
我想了解如何在更新面板完成更新后运行客户端JavaScript,给出各种限制。我的开发场景并不简单,但是我想通过描述一个简单的情况来阐述问题。
我有一个包含更新面板、按钮和表格的用户控件。当用户点击按钮时,将会进行异步回发,表格的行将发生变化,并且更改后的表格将被返回并呈现在客户端。
我想运行一个脚本来对表格执行一些自定义格式设置。现在假设我只想对表格进行斑马线条纹处理。(实际需求更加复杂)
我原以为可以在用户控制输出的一部分中发出脚本,并且每当更新发生时,表格标记和脚本都会在客户端上处理,一切都很好,但是这种技术不起作用。
我看到其他帖子引用了ClientScriptManager,但是似乎在我的用户控件内不可用。我应该添加一个ScriptManagerProxy吗?
那么,在给定的限制下,最好的方法是什么呢?
- 更新面板在用户控件内。 - 页面上可能会有多个用户控件实例。
看起来我需要:
- 为每个用户控件实例生成唯一的更新脚本。 - 找到一种方式“注册”每个脚本 - 找到一种方式,在相应的updatePanel完成更新后要求运行脚本。
似乎我已经看到了许多接近但不符合我的情况的示例;我无法完全弄清楚如何将所有内容组合在一起。
2个回答

1

不得不使用类似于“codethatworkedforme”文章中所做的技术,因为一旦我将UI元素包装在用户控件中,仅使用RegisterStartupScript是不够的。 - IanT8

0
  • 如果你想为每个用户控件实例创建一个唯一的更新脚本,可以尝试以下代码:

    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不会导致已注册脚本的累积吗? - IanT8
我正在尝试一些精简的代码;单页面、单更新面板、无用户控件、内联脚本等。在IE8中似乎可以工作,但在Firefox 6中却不行。奇怪。在Firefox 6中,Ajax部分可以正常工作,但脚本没有被触发。奇怪。 - IanT8
将代码从主页面移动到用户控件中后无法正常工作。仍在调查中。 - IanT8

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