我有一个带runat="server"
的简单输入元素。该字段嵌套在几层用户控件中,我使用getter提取ID,但给出的ID不是完整生成的ID。
//UserControl2.ascx nested inside of UserControl1.ascx
...
<input type="text" runat="server" id="newTextBox" />
...
//UserControl1.ascx.cs nested inside of Page1.aspx
...
public string NewTextBoxId;
protected void UserControl2PlaceHolder_Load(object sender, EventArgs e)
{
var c = LoadControl("~/Common/Controls/Shared/UserControl2.ascx");
NewTextBoxId = ((App.Common.Controls.Shared.UserControl2) c).newTextBox.ClientID;
}
问题是NewTextBoxId设置为“newTextBox”而不是完全生成的“ct100_ct100_MainContent_etc._newTextBox”。输入的ID在HTML中正确呈现,但NewTextBoxId未正确设置。为了使事情更奇怪,输入的ID在我的本地实例上呈现为“newTextBox”,但是当我部署到我们的登台服务器时,它在HTML中呈现为“ct100_ct100 ... _ newTextBox”。关于这个的任何想法?
答案 0 :(得分:1)
正如我的评论所述。在调用c
之前,必须将LoadedControl c.ClientID
添加到当前控件的ControlCollection中。添加到ControlCollection将导致c
被初始化。
//UserControl2.ascx nested inside of UserControl1.ascx
...
<input type="text" runat="server" id="newTextBox" />
...
//UserControl1.ascx.cs nested inside of Page1.aspx
...
public string NewTextBoxId;
protected void UserControl2PlaceHolder_Load(object sender, EventArgs e)
{
var c = LoadControl("~/Common/Controls/Shared/UserControl2.ascx");
this.Controls.Add(c);
NewTextBoxId = ((App.Common.Controls.Shared.UserControl2) c).newTextBox.ClientID;
}