ID vs Unique ID vs Client ID vs Unique ClientID vs Static ClientID?

Posted

技术标签:

【中文标题】ID vs Unique ID vs Client ID vs Unique ClientID vs Static ClientID?【英文标题】:ID vs UniqueID vs ClientID vs UniqueClientID vs StaticClientID? 【发布时间】:2011-11-03 23:39:55 【问题描述】:

好吧,我对动态创建的控件的 ID 感到很困惑。

Public Class TestClass
    Inherits Panel
    Implements INamingContainer

    Function TestClassInit() Handles Me.Init

        Dim pnlMainPanel As New Panel
        Me.Controls.Add(pnlMainPanel)

        Dim pnlTest1 As New Panel
        pnlMainPanel.Controls.Add(pnlTest1)

        pnlTest1.ClientIDMode = UI.ClientIDMode.Inherit ' DEFAULT
        'pnlTest1.ID = "ctl01"
        'pnlTest1.UniqueID = "ctl00$MainPanel$ctl01"
        'pnlTest1.ClientID = "MainPanel_ctl01"
        'pnlTest1.UniqueClientID = "ctl00_MainPanel_ctl01"
        'pnlTest1.StaticClientID = ""

        pnlTest1.ClientIDMode = UI.ClientIDMode.Predictable
        'pnlTest1.ClientID = "MainPanel_ctl01" (no change)

        pnlTest1.ClientIDMode = UI.ClientIDMode.AutoID
        'pnlTest1.ClientID = "ctl00_MainPanel_ctl01"

        pnlTest1.ClientIDMode = UI.ClientIDMode.Static
        'pnlTest1.ClientID = ""

    End Function
End Class

为什么会有 5 个不同的 ID??

什么时候应该使用不同的 ID 模式?

(我阅读了 MSDN 文档,但和往常一样,它们并不是特别有启发性。)

如果我不关心 什么 ID 是什么,只想添加一个控件并将其 ID 提供给动态添加的 AJAX 扩展器,我应该使用哪种模式/ID 组合? p>

【问题讨论】:

如果您不关心 abt id 为什么要首先添加它们 我认为 .NET 的 MSDN 文档与...SharePoint 相比非常好 【参考方案1】: ID 是您在代码中使用的服务器端 ID。 UniqueId 对应于生成的 html 元素的“名称”属性。 ClientID 对应于生成的 html 元素的“id”属性。所以这取决于您需要哪个属性(名称与表单 post 一起发送,id 用于 DOM 操作)。 不确定 uniqueclientid 是什么 :)

ASP.Net 4 添加了 clientIdMode,如果您将其设置为“静态”,则允许您强制 id 属性与服务器端 id 匹配(因此更可预测)。

【讨论】:

可能需要注意的是,在后面的代码中,ClientIDUniqueID 都是 getter 和 readonly,而 ID 是可读写和可设置的。【参考方案2】:

使用 ClientID 属性。

ClientIDMode 是否支持 100% 设置控件使用的实际 ID 的能力。你的选择。基本上它有助于编写 javascript 代码。

【讨论】:

【参考方案3】:

ClientIDMode 已添加到 ASP.NET 4 以允许根据需要进行控制。它对于 jQuery 等客户端库特别有用。 ASP.NET 的魔力取决于控件的独特性。如果您决定使用静态,请确保它们是唯一的,因为您可能会遇到一些意外的运行时错误。

【讨论】:

以上是关于ID vs Unique ID vs Client ID vs Unique ClientID vs Static ClientID?的主要内容,如果未能解决你的问题,请参考以下文章

Symfony UniqueEntity vs UniqueConstraint vs unique=true

选择器性能 - 'E#id' vs '#id' - 在 CSS 和 jQuery 中

MySQL中的limit vs exists vs count(*) vs count(id) [重复]

谷歌登录 - “access_token” vs “id_token” vs “code”

索引范围扫描 vs 索引跳过扫描 vs 索引快速全扫描

Jquery 选择器 - this vs id vs class