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 匹配(因此更可预测)。
【讨论】:
可能需要注意的是,在后面的代码中,ClientID
和 UniqueID
都是 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) [重复]