2011-08-25 94 views
8

好吧,我對動態創建的控件的ID感到困惑。ID與UniqueID vs ClientID vs UniqueClientID vs StaticClientID?

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組合?

+0

如果你不在乎abt ids爲什麼把他們放在第一位 – Baz1nga

+1

我認爲.NET的MSDN文檔與...相比是非常好的...例如 –

回答

16
  • ID是您在代碼中使用的服務器端ID。
  • UniqueId對應於生成的HTML元素的「name」屬性。
  • ClientID對應於生成的html元素的「id」屬性。所以它取決於你需要哪個屬性(名稱是用表單發送的,id用於DOM操作)。
  • 不知道uniqueclientid是什麼:)

ASP.Net 4增加的ClientIDMode它可以強制id屬性相匹配的服務器端ID(因此更加可預測的),如果你把它設置爲「靜態」。

+1

應該注意的是,在後面的代碼中,'' ClientID'和'UniqueID'都是getter和readonly,而'ID'是可讀寫和可設置的。 – johntrepreneur

1

使用ClientID屬性。

ClientIDMode是否支持100%設置控件使用的實際ID的能力。你的選擇。基本上它有助於編寫JavaScript代碼。

1

ClientIDMode已添加到ASP.NET 4以允許您在需要時進行控制。這對客戶端庫(如jQuery)特別有用。 ASP.NET的魔力取決於控件的獨特性。如果您決定使用Static,請確保它們是唯一的,因爲您可能會遇到一些意外的運行時錯誤。

相關問題