2

ClientID の奇妙な動作は次のとおりです。以下の手順で再現できます。

  1. .net 3.5 を使用して Web プロジェクトを作成する
  2. 新しい WebUserControl を追加します
  3. コントロールにテキスト ボックスを追加する<asp:TextBox runat="server" ID="txt1"></asp:TextBox>
  4. デフォルト ページで、PlaceHolder を追加します。<asp:PlaceHolder runat="server" ID="phTest"></asp:PlaceHolder>
  5. コード ビハインドで、次を追加します。

    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);
    }
    
  6. ページを閲覧すると表示されますtxt1 - txt1

  7. フレームワークを .Net4 に変更して を使用するclientIDMode="AutoID"と、結果は次のようになります。txt1 - ctl00_MainContent_ctl00_txt1

通常、別のコンテナーに追加する場合は clientID をプレフィックスに追加する必要がありますが、なぜここで clientID が変更されなかったのでしょうか?

これが設計によるものなのか、それとも単なるバグなのかを知りたいだけです。ありがとう。

4

0 に答える 0