如何引用动态创建的控件?

时间:2013-05-16 16:37:10

标签: c# asp.net

当用户点击某个按钮或更改所选的单选按钮时,有没有办法引用动态创建的控件,例如一对TextBox和一个RadioButtonList。

我需要将记录插入数据库,但我需要所有的值。我不能对控件进行硬编码,因为它们必须在运行中创建。

TextBox t1 = new TextBox();
PlaceHolder1.Controls.Add(t1);

TextBox t2 = new TextBox();
PlaceHolder1.Controls.Add(t2);

RadioButtonList rbList = new RadioButtonList();
rbList.Items.Add(new ListItem("Today", "1"));
rbList.Items.Add(new ListItem("This Week", "2"));
rbList.SelectedIndexChanged += new EventHandler(rbList_SelectedIndexChanged);

PlaceHolder1.Controls.Add(rbList);

我需要在rbList_SelectedIndexChanged或其他一些事件中引用两个文本框和RadioButtonList。将EventHandlers添加到文本框是不行的,因为我需要将所有三个值插入到数据库中。

我的初衷是以某种方式将texbox的引用传递给rbList_SelectedIndexChanged事件,但我不确定如何做到这一点,更不确定它是否会起作用。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:5)

我认为您可以使用FindControl()完成此操作。您需要为代码隐藏中的那些文本框设置ID。

您可能在PlaceHolder1事件中引用了rbList_SelectedIndexChanged。所以在活动中:

var TextBox1 = (TextBox)Placeholder1.FindControl("{text box 1 ID here}");
var TextBox2 = (TextBox)Placeholder1.FindControl("{text box 2 ID here}");

答案 1 :(得分:2)

创建UserControl以封装这些控件。在内部放置一些逻辑以根据其值保存两个控件。将此用户控件添加到PlaceHolder。 View this article for further reading

答案 2 :(得分:1)

  

我的初衷是以某种方式将texbox的引用传递给bList_SelectedIndexChanged事件

这就是我要做的。通过对事件处理程序使用匿名方法可以轻松完成此操作,该方法可以关闭所需的变量:

rbList.SelectedIndexChanged += (s, e) =>selectionChangedHandler(rbList t1, t2);