2011-08-25 11 views
8

さて、私はかなり動的に作成されたコントロールのIDについて混乱しています。ID対UniqueID対ClientID対UniqueClientID対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

なぜあなたは最初の場所にそれらを追加するのですか? – Baz1nga

+1

私はMSDNのドキュメントが.NETと比較して非常に優れていると思います。例えばSharePoint –

答えて

16
  • IDは、コードで使用するサーバーサイドIDです。
  • UniqueIdは、生成されたHTML要素の "name"属性に対応します。
  • ClientIDは、生成されたhtml要素の "id"属性に対応します。したがって、必要な属性に依存します(名前はフォームのポストで送信され、IDはDOM操作に使用されます)。 uniqueclientidが:)で何
  • わからない

ASP.Net 4が追加されます、あなたが「静的に設定するとサーバー側のIDと一致する(したがって、より予測可能)するためにid属性を強制することを可能にするのClientIDMode "

+1

それはおそらく、 ClientID'と 'UniqueID'は両方ともgetterとreadonlyですが、' ID'は読み書きと設定が可能です。 – johntrepreneur

1

ClientIDプロパティを使用します。

ClientIDModeは、コントロールによって使用されている実際のIDを100%設定する機能をサポートしていますか。あなたの選択。基本的には、JavaScriptコードの作成に役立ちます。

1

ClientIDModeがASP.NET 4に追加され、必要に応じて制御できるようになりました。これはjQueryのようなクライアント側ライブラリにとって特に便利です。コントロールの一意性に関するASP.NETの魔法のヒンジ。 Staticを使用することを決めた場合、それらが一意であることを確認してください。突然ランタイムエラーが発生する可能性があります。

関連する問題