Asp.net 如何获取用户控件(在Repeater中呈现的用户控件)内的TextBox(以编程方式添加)的值

Asp.net 如何获取用户控件(在Repeater中呈现的用户控件)内的TextBox(以编程方式添加)的值,asp.net,webusercontrol,Asp.net,Webusercontrol,通常,我们这样做是为了获取用户控件中textbox的值 <asp:TextBox runat="server" Text="Test" ID="txtTest"/> 在父页面中,我们可以得到用户控件的实例和文本框的值 foreach (RepeaterItem itm in rptAttribute.Items) { MyUserControl uc = ((MyUserControlitemUserControl)itm.FindControl("MyContorlN

通常,我们这样做是为了获取用户控件中textbox的值

<asp:TextBox runat="server" Text="Test" ID="txtTest"/>
在父页面中,我们可以得到用户控件的实例和文本框的值

foreach (RepeaterItem itm in rptAttribute.Items)
{     
 MyUserControl uc = ((MyUserControlitemUserControl)itm.FindControl("MyContorlName"));
 string  test = uc.MyString;
}

但是,如果用户控件中的文本框是以编程方式创建的,则不确定如何呈现该值。

您可以对文本框采用类似的方法,但声明一个公共方法,该方法将文本框名称作为参数,然后按如下方式返回:

在您的ASCX中:

public TextBox GetDynamicTextBoxByID(string textBoxId)
{
  return (TextBox)Page.FindControl(textBoxId);
}
在父页面中:

foreach (RepeaterItem itm in rptAttribute.Items)
{     
 MyUserControl uc = ((MyUserControlitemUserControl)itm.FindControl("MyContorlName"));
 string  test = uc.MyString;
 TextBox tx = uc.GetDynamicTextBoxByID(idOfTextBox);
}

不要忘记检查是否返回null并进行适当处理。

您是否能够确定要查找的文本框的ID,以及是否在Page_Init事件处理程序中创建动态文本框?我在Page_Init方法中声明textbox时实际给出了ID。基本上,您已经在Repeater中动态创建了MyUserControl,并在MyUserControl中动态创建了一个文本框。如果是这样,您如何在UserControl中动态创建文本框?@Win:我没有动态创建用户控件。just textbox是dynamic.textbox tx=uc.GetDynamicTextBoxByID(idOfTextBox);适用于控件的名称,但不适用于控件的ID。有趣的是,您可以发布您的工作代码(将其添加到您的问题中)吗?谢谢你的接受,无论如何!老实说,你已经完成了所有困难的部分;o)
foreach (RepeaterItem itm in rptAttribute.Items)
{     
 MyUserControl uc = ((MyUserControlitemUserControl)itm.FindControl("MyContorlName"));
 string  test = uc.MyString;
 TextBox tx = uc.GetDynamicTextBoxByID(idOfTextBox);
}