这是奇怪的 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没有改变?
我只是想知道这是设计使然还是只是一个错误。谢谢。