在每个对象上设置ClientIDMode = Static是否存在缺点?(设置在主控内容页上)

30
我正在处理一个 asp.net 项目,每次需要使用 jquery 标识符 $(#"objectID") 时,我必须更改每个对象的 ClientIDMode 为静态。因为我已经注意到默认的客户端 ID 模式是继承,所以我将 MainContent 客户端 ID 模式设置为静态,并发现所有对象都变成了静态的。

这在工作中使用 jquery 时肯定会省很多时间,但我想知道这样做是否有任何缺点,是否有任何理由不应该一开始就将 ClientIDMode 设置为静态?


那么,你发现了任何缺点吗? - Brian Ogden
我们通常在web.config中为代码的某些部分设置全局对象,并为对象选择良好的ID - 然后在其他具有更复杂依赖关系并且预期结构更频繁更改的项目中,我们会在对象级别上进行设置(在aspx页面本身)。 - Simply G.
2个回答

21

如果涉及到用户控件等内容,请小心设置ClientIDMode为Static,否则可能会出现多个具有相同ID的元素。

对于像GridView这样的数据绑定控件,您还需要使用ClientIDRowSuffix属性来确保每行都有所区别。

这篇文章有一些好的例子。


链接已经失效。也许可以尝试这个链接:http://www.west-wind.com/weblog/posts/2009/Nov/07/ClientIDMode-in-ASPNET-40 - Homer
我已经更新了我的回答中的原始链接。现在应该可以使用了!谢谢。 - Graham Clark

6

在JavaScript中处理ID的另一种方法是像这样做:

var something = '<%= btnId.ClientID %>';

示例:如果您有一个像这样的按钮控件:

<asp:Button ID="btnId" runat="server"></asp:Button>    

如果ID被翻译为id="ct100_ContentPlaceHolder1_btnId",那么你可以使用变量something来访问控件。


1
如果按钮位于用户控件内,则它将无法工作。 - Jeyaganesh

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