findcontrol找不到动态添加的控件,它只是前一行加了一行

时间:2013-02-14 10:48:21

标签: asp.net controls findcontrol

谁可以向我解释一下?

CheckBox ckRequest = new CheckBox();
ckRequest.ID = "ckRequest";
ckRequest.DataBinding += new EventHandler(this.CkIsRequested_DataBinding);
container.Controls.Add(ckRequest);
Control con = container.FindControl("ckRequest");

调试显示con仍为空。

调试也告诉我,那个conteiner.Controls有一个ID为“ckRequest”的项目

这怎么可能????


非常感谢您的回答。

其实我尝试以下方法。 findcontrol does not find dynamically created control in rowUpdating eventhandler 对我来说,findcontrol仅适用于创建的页面。

在哪个时间点创建页面的可视树?

3 个答案:

答案 0 :(得分:3)

FindControl仅在控件位于页面的可视树中时才有效

在你的情况下你可以尝试这个

var checkBoxesInContainer = container.Controls.OfType<CheckBox>();

http://msdn.microsoft.com/en-us/library/bb360913.aspx

答案 1 :(得分:2)

您可以使用以下内容:

Control con = 
    container.Controls.Cast<Control>().First(item => item.ID == "ckRequest");

答案 2 :(得分:0)

您可能想尝试以下内容:

//GET THE CHECKBOXLIST
Control c = phCategories.Controls.Cast<Control>().First(item => item.ID == "cblCatID-" + catID && item.GetType().Name == "CheckBoxList");
if (c.GetType().Name == "CheckBoxList")
{
  cbl = (CheckBoxList)c;
}

出于某种原因,我需要首先将其作为控件。如果我没有这样做,我似乎拿了一个标签(这对我来说没有意义,因为它实际上并没有抓住标签)。希望它对某人有所帮助。