0

を含む単純な入力要素がありrunat="server"ます。このフィールドは、ユーザー コントロールのいくつかのレイヤーにネストされており、ゲッターを使用して 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;
}

問題は、完全に生成された「ct100_ct100_MainContent_etc._newTextBox」ではなく、NewTextBoxId が「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 に答える