示例代码:
var div = new HtmlGenericControl("div");
div.Controls.Add(new Literal() { ID = "litSomeLit" });
var lit = (Literal)div.FindControl("litSomeLit");
Assert.IsNotNull(lit);
此代码使断言失败,因为 lit 为空。调试显示 div.Controls 肯定包含 ID 为“litSomeLit”的文字。我的问题是“为什么?” 和“有什么方法可以控制特定 ID,而无需一次手动地对 div.Controls[] 进行递归搜索一个元素?”
我这样做的原因是我的实际应用程序并不是那么简单——我正在编写的方法被赋予了一个复杂的控件,其中包含多个可能配置中的多个子控件。我需要访问一个特定的控件向下几层(例如,ID 为“txtSpecificControl”的控件可能位于StartingControl.Controls[0].Controls[2].Controls[1].Controls[3]
)。通常我可以这样做FindControl("txtSpecificControl")
,但是当控件只是动态创建时(如上面的示例代码),这似乎不起作用。