3

我在 ASP.NET 页面上有一个 JavaScript 函数,当在网格标题中选中“检查全部”复选框时,它将检查客户端网格中的所有框。它通过在 JS 函数中为循环中的每一行构造实际的控件 ID(即 + '_ ctl' + i + ' ' + 其中 i 是当前循环的行索引)然后将生成的控件设置为检查。

这已经工作了很长时间,但现在它已经停止工作,原因是 .NET 渲染引擎或创建内部控件 ID 的任何东西不同。例如,当在另一台服务器上查看页面源时,该页面仍在正常工作,控件名称为dgMain__ctl2_cbxChecked,但不工作的服务器上的控件名称为dgMain__ctl02_cbxChecked。不同之处在于,在不工作的版本的“ctl”部分的数字 ID 前面有一个额外的“ 0 ”。

我想知道这是否与.NET 的版本有关?它不能在我相对较新的本地机器上运行(用于在旧机器上运行),但它仍然可以在部署在生产环境中的旧服务器上运行。两个版本都运行 ASP.NET 1.1(是的,我知道 - 与时俱进)。

关于如何解决这个问题的任何线索?

4

1 回答 1

1

这是一种相当危险的做法。相反,您应该收集生成的控件ClientID的服务器端,然后使用ClientScriptManager. 另一种方法是使用CssClass并使用 jQuery 或其他一些 DOM 操作库来查找您的控件。

控件命名约定使得 ID 无法保证。它可以从 .NET 版本更改为版本(尽管不太可能),并且可以根据页面上的其他控件或用户控件的嵌套级别等进行更改。

于 2012-11-14T20:45:01.617 回答