0

我有一个简单的输入元素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”。对此有什么想法吗?

4

1 回答 1

1

正如我的评论中所述。LoadedControlc必须在调用之前添加到当前控件的 ControlCollection 中c.ClientID。添加到 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;
}
于 2012-09-19T15:48:12.030 回答