コード例:
var div = new HtmlGenericControl("div");
div.Controls.Add(new Literal() { ID = "litSomeLit" });
var lit = (Literal)div.FindControl("litSomeLit");
Assert.IsNotNull(lit);
lit が null であるため、このコードはアサートに失敗します。デバッグすると、div.Controls には ID が "litSomeLit" のリテラルが確実に含まれていることがわかります。私の質問は「なぜ?」および「一度に 1 つの要素を手動で div.Controls[] を再帰的に検索せずに、特定の ID のコントロールを取得する方法はありますか?」
私がこのようにやっている理由は、私の実際のアプリケーションがそれほど単純ではないからです。私が書いているメソッドには、いくつかの可能な構成でいくつかのサブコントロールを持つ複雑なコントロールが与えられています。特定のコントロールに数層下にアクセスする必要があります (たとえば、ID が "txtSpecificControl" のコントロールは にありますStartingControl.Controls[0].Controls[2].Controls[1].Controls[3])。通常はFindControl("txtSpecificControl").