2009-05-22 21 views
5

の動作を変更し、ユーザーコントロール等にrunat =「サーバー」私はいくつかのコントロールでページを持っていレイアウト

を追加します。

どうして私はそれを防ぐことができますか? .NETは、明らかに私はしたくない、私のIDを変更するため

私は2.0の.NET Framework

を使用していますが、それか?

+0

お客様の状況をよりよく理解できるように、コードサンプルをお知らせください。 –

+0

カスタム属性やスタイルの追加など、すべてのコントロール(runat = "server"のコントロール)に適用されるサーバー側のコードはありますか? –

+1

また、あなたのdivにはCSSスタイルのIDがありますか? runat = "server"を追加すると、レンダリング時にそのコントロールのClientIDが変更され、CSSが破損する可能性があります。 –

答えて

12

CSSでdivコントロールのIDをターゲットに設定してから、サーバーでコントロールを実行すると、スタイルが適用されなくなります。

これは、ASP.NETには同じ名前のコントロールが複数存在しないように、組み込みのメカニズム(INamingContainer)が組み込まれているためです。

<div id="ctl00_ctl00_myDivName" runat="server" /> 

これを回避する最も簡単な方法は、クラスでの作業にIDに取り組んでから、それを変更することです:

また
<div class="myDiv" runat="server"></div> 

、私はそれはあなたがで終わるように、コンテナの接頭辞を追加することでこれを行いますXHTMLは、divのはそう、これはあなたのIDがないことを確認しますClientMode =「静的」を追加

<div runat="server">Some content</div> 
0

divにrunat = "server"を追加すると、システムによって自動的にIDが生成されます。 IDマングリングと呼ばれています。残念ながら、私が気付いているdivの2.0フレームワークでは(それはとにかく苦労することなく)行うことはできませんが、4.0ではオーバーライドを取得しています...カスタムコントロールについて)、ClientIDとUniqueIDの各フィールドを上書きすることができます。したがって、divをベースとして使用したMyDivクラスを作成してClientID/UniqueIDフィールドを作成した場合は、それを確認する必要があります。

あなたの他の選択肢は、マングルされたIDを使用するようにCSS/javascriptを更新することです。これは、ASP.Netがポストバック中にコントロールを見つけるために使用するので、ページ内の位置に基づいてかなり静的です。

+0

スタイリングでIDが変更されていることを示唆しているのに驚いています。私の本の悪い練習。クラスを使用するためにそれを交換する方がはるかに保守可能なオプションです。 –

+1

私はCSSでmangled IDを使用しません。 –

+2

私はそれが良い選択だとは言いませんでした。ちょうどオプション。 – JaCraig

0

を使用するタグを閉じていることが必要であることを信じていますあなたのコントロールのためにクライアントサイドIDに変更されました。

関連する問題