ClientID の奇妙な動作は次のとおりです。以下の手順で再現できます。
- .net 3.5 を使用して Web プロジェクトを作成する
- 新しい WebUserControl を追加します
- コントロールにテキスト ボックスを追加する
<asp:TextBox runat="server" ID="txt1"></asp:TextBox>
- デフォルト ページで、PlaceHolder を追加します。
<asp:PlaceHolder runat="server" ID="phTest"></asp:PlaceHolder>
コード ビハインドで、次を追加します。
protected override void OnPreRender(EventArgs e) { var ctl = (WebUserControl1)LoadControl("WebUserControl1.ascx"); var id = ctl.Txt1.ClientID; phTest.Controls.Add(ctl); id += " - " + ctl.Txt1.ClientID; ctl.Txt1.Text = id; base.OnPreRender(e); }
ページを閲覧すると表示されます
txt1 - txt1
- フレームワークを .Net4 に変更して を使用する
clientIDMode="AutoID"
と、結果は次のようになります。txt1 - ctl00_MainContent_ctl00_txt1
通常、別のコンテナーに追加する場合は clientID をプレフィックスに追加する必要がありますが、なぜここで clientID が変更されなかったのでしょうか?
これが設計によるものなのか、それとも単なるバグなのかを知りたいだけです。ありがとう。