ASP.NET:如何访问动态创建的控件

时间:2012-11-14 17:32:50

标签: asp.net dynamic checkbox

我正在动态创建一堆Checkbox:

CheckBox chkRead = new CheckBox();
chkRead.ID = "chk1";
chkRead.AutoPostBack = true;
chkRead.CheckedChanged += new EventHandler(CheckBox_CheckedChanged);

CheckBox chkPost = new CheckBox();
chkRead.ID = "chk2";
chkPost.AutoPostBack = true;
chkPost.CheckedChanged += new EventHandler(CheckBox_CheckedChanged);


 protected void CheckBox_CheckedChanged(object sender, EventArgs e)
 {
     CheckBox chk = (CheckBox)sender;


 }

我想做的是以下内容:    当我检查 chkPost CheckBox时,我想要检查 chkRead CheckBox

CheckBox_CheckedChanged 事件中,我只能访问被点击的CheckBox    但我不知道如何检查该事件的其他复选框。

4 个答案:

答案 0 :(得分:3)

这是来自记忆,但你可以这样做:

protected void CheckBox_CheckedChanged(object sender, EventArgs e)
{
    CheckBox chk = (CheckBox)sender;
    CheckBox chkPost = (CheckBox) chk.NamingContainer.FindControl("chk2");
    CheckBox chkRead = (CheckBox) chk.NamingContainer.FindControl("chk1");
    if(chk == chkPost && chk.Checked)
    {  
        chkRead.Checked = true;
    }
} 

这假设您希望在回发后在代码隐藏中执行所有这些操作。如果你想在javascript中这样做,这是一个不同的问题。

这也假设chk1chk2位于同一命名容器中。如果不是,事情会变得复杂。

答案 1 :(得分:2)

由于您的代码创建了复选框,因此您可以将其引用存储在列表或字典中,并在需要时通过id检索它们。

答案 2 :(得分:0)

如果你想动态地创建它,你可以在你感兴趣的checkbox_s上添加一个属性 - 然后你可以循环遍历Page.Controls集合并测试你正在循环的控件是否具有该属性然后你可以检查或取消选中它。

一些伪代码:

foreach(var control in Page.Controls)
  if(typeof(Control) is CheckBox and ((CheckBox)control).Attributes["myAttr"] != null)
     //check or uncheck it

在阅读你对嵌套控件的评论时 - 这可能有点麻烦 - 我倾向于同意Igor,你应该将id放在一个集合中,因为它们是动态添加的。 / p>

答案 3 :(得分:0)

您可以在创建这些复选框的位置粘贴代码吗?是“OnInit”还是其他地方?您是将这些复选框放在容器中,是将这些控件存储为全局变量还是在方法中创建它们?