2009-04-15 11 views
3

私は今ここで少し混乱しています。私に説明してみましょう:なぜサーバーサイドコントロールのIDが生成されないのですか?

私はasp.netのページへのボタンまたは他のいくつかのコントロールを追加することについて話人(3.5)を見てきましたし、コントロールは、それは例えば、そのコントロールのIDを変更したときにレンダリングします。 Button1のはjQueryのを使用してからそれらを防止し、彼らが使用して終了すると、だから私は少しテスト今

1. I added a button on the page: 
<form id="form1" runat="server"> 
<div> 
<asp:Button ID="Button1" runat="server" Text="Button" /> 
<div> 

2. Then I added a JavaScript and jQuery: 
<script type="text/javascript"> 
        $(document).ready(function() { 
        $("#Button1").click(function() { 
         alert("Hello world!"); 
        }); 

        }); 
       </script> 

3. The generated html is this: 
<div> 
    <input type="submit" name="Button1" value="Button" id="Button1" /> 
<div> 

をした、私はASP.NET(ASPが表示されないように<%controlId.ClientId %>

ようなものであるButton1_somethingsomethingになります。ネット3.5)のIDを変更します。なぜ私は異なった行動を見ますか?

Btw。これは私がボタンを押すとうまくいく!

ありがとうございました。制御はNaming Containerの内部にある場合

答えて

9

ASP.NETは、IDのみを変化させます。これには、特定のユーザーコントロール、マスタページのContentPlaceHolders、繰り返しコントロール(Repeater、GridViewなど)などが含まれます。

0

ASP.NETではID名はデフォルトで変更されませんが、マスターページのContentPlaceHolder。したがって、名前はctl00_ContentPlaceHolderContent_Button1のようなものになります。あなたのケースでは、マスターページはなく、変更は行われません。

0

それは(ASPなど:コンテンツコントロール、マスターページで使用される)特定のコントロールがあることINamingContainerインターフェイスによるものです実装。 MSDNから

この インタフェースを実装するすべてのコントロールは、すべての子コントロールのIDが が アプリケーション全体内で一意であることが保証されている属性 で新しい名前空間を作成します。このインターフェイスによって提供されるマーカ は、 動的に 生成されたサーバコントロールインスタンスの固有の名前付けで、 がデータバインディングをサポートするようにWebサーバ内の コントロールを許可します。これらのコントロール には、Repeater、DataGrid、 DataList、CheckBoxList、 ChangePassword、LoginView、Menu、 SiteMapNodeItem、およびRadioButtonListコントロールが含まれています。これらのコントロールは です。

あなたのサンプルコードでは、これらのコントロールのいずれかを使用していません。 ContentPlaceHolderでマスターページを使用しません。あなたのIDはこれにより変更されません。

1

必ずしもYourControl.ClientIDを使用する必要はないかもしれませんが、コントロールがコンテナ内で終わった場合に、戻って修正する必要はありません。

関連する問題