ASP.Net 3.5 ClientID问题

时间:2012-09-19 13:34:17

标签: c# asp.net

我有一个带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”。关于这个的任何想法?

1 个答案:

答案 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;
}