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