【问题标题】:How to get the value of TextBox (programmatically added) which is inside a user control (user control rendered inside Repeater)如何获取用户控件内的TextBox(以编程方式添加)的值(在Repeater内呈现的用户控件)
【发布时间】:2013-04-24 20:57:27
【问题描述】:

通常我们这样做是为了获取用户控件内的文本框的值。

<asp:TextBox runat="server" Text="Test" ID="txtTest"/>

在代码后面创建一个属性

public string MyString
  {  
     get  { return txtTest.Text; }   
  }

在父页面中,我们可以获取用户控件的实例并获取文本框的值,如

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

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

【问题讨论】:

  • 您是否能够确定您要查找的文本框的 ID 以及您是否在 Page_Init 事件处理程序期间创建动态文本框?
  • 我在 page_init 方法中声明文本框时务实地给出了 id。
  • 基本上,您已经在Repeater 中动态创建了MyUserControls,并在MyUserControl 中动态创建了TextBox。如果是这样,如何在 UserControl 中动态创建 TextBox?
  • @Win:我没有动态创建用户控件。只是文本框是动态的。

标签: asp.net webusercontrol


【解决方案1】:

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

在您的 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 并进行适当处理。

【讨论】:

  • TextBox tx = uc.GetDynamicTextBoxByID(idOfTextBox);适用于控件的名称,但不适用于控件的 ID。
  • 嗯,有趣 - 你能发布你的工作代码(将它添加到你的问题中)吗?无论如何,感谢您的接受!老实说,你已经完成了所有困难的部分;o)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 2010-12-13
  • 1970-01-01
  • 2011-08-14
相关资源
最近更新 更多