【问题标题】:Is there any advantage to querying ClientID over ID?查询 ClientID 而不是 ID 有什么好处吗?
【发布时间】:2017-03-23 18:26:31
【问题描述】:

这两项检查都有效:

If cntrl.ID.ToString().Contains("ckbx") Then
If cntrl.ClientID.ToString().Contains("ckbx") Then

查询 ClientID 优于 ID 有什么好处吗?

顺便说一句,我直接分配给 ID,而不是分配给 ClientID(如果可能的话)。该代码是:

Dim chk = New CheckBox()
chk.ID = "ckbx" + i.ToString()
chk.Checked = True
formCustCatMaint.Controls.Add(chk)

【问题讨论】:

  • 它们都是不好的代码气味。如果您必须根据魔术字符串进行匹配,您可能需要重新考虑您的设计。
  • 也许你是对的,但是对前置条件的测试会验证只有我动态生成并给出前置值的复选框被找到并采取行动。
  • 所以你说两者都有效?在您的测试中,两者的表现都一样吗?那为什么要问一个广泛开放的、主要基于意见的问题呢?
  • 我发现没有区别(性能方面);我想知道是否有人知道使用任一选项的“陷阱”。

标签: asp.net vb.net


【解决方案1】:

查询 ClientID 优于 ID 有什么好处吗?

简短的回答是取决于使用情况...

ID 用于为服务器控件分配一个标识符,该标识符以后可用于访问该控件。您可以使用代码隐藏中生成的字段,也可以将 ID 属性的值传递给 FindControl 方法。 有一个问题; ID 属性仅在当前容器中是唯一的:页面、用户控件、带有项模板的控件等。如果在某些其他控件(Repeater、DataGrid)或用户控件的项模板内定义了服务器控件,则其 ID 属性为 no更长的独特性。

ClientID 是按照相同的规则生成的(控件的 ID 以它的 NamingContainer 的 ID 为前缀)。唯一的区别是分隔符 - 对于 ClientID,它是“_”(下划线)符号。 ClientID 属性在 ASP.NET 页中定义的所有控件中是全局唯一的。

另外值得一提的是,如果控件是在母版页中定义的,则 ID 或 ClientID 的值将相同。但是,它可能会导致意外错误。如果控件的 ID 是在 JavaScript 语句中硬编码的,则只有在页面或母版页中定义了控件时,该代码才有效。将控件和 JavaScript 代码移动到 ID 为“UserControl1”的用户控件将在运行时失败。

您可以在那里read morehere

【讨论】:

    猜你喜欢
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 2012-05-18
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多