ID与UniqueID对比ClientID与UniqueClientID对比StaticClientID?

时间:2011-08-25 19:14:11

标签: javascript asp.net ajax vb.net dom

好的,我对动态创建的控件的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组合?

3 个答案:

答案 0 :(得分:16)

  • ID是您在代码中使用的服务器端ID。
  • UniqueId对应于生成的HTML元素的“name”属性。
  • ClientID对应于生成的html元素的“id”属性。所以它取决于你需要的属性(名称是通过表单发送的,id用于DOM操作)。
  • 不确定uniqueclientid是什么:)

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

答案 1 :(得分:1)

使用ClientID属性。

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

答案 2 :(得分:1)

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