Page.FindControl メソッドは、コントロールが「同じレベル」にある場合は問題ありませんが、多くの場合、コントロールは他のコントロール内に埋もれています。残念ながら、特定のページ内のすべてのコントロールを再帰的に検索する必要がある可能性があります。これは、指定された id 値でコントロールを見つけるために使用するコードです...
string g_Error = string.Empty;
List<Control> _infos = new List<Control>();
_infos = ProcessControls(_infos, Page, "info_");
...
public List<Control> ProcessControls(List<Control> MatchControls, Control controls, string FieldKey)
{
try
{
//get a recusive listing of all existing controls for reference
foreach (Control cControl in controls.Controls)
{
if (cControl.Controls.Count > 0)
{
//recusive call
MatchControls = ProcessControls(MatchControls, cControl, FieldKey);
}
//field rules
//must contain Fieldkey to be collected (i.e. control id = FirstName where the FieldKey is "Name")
//so first, loop through and collect controls with FieldKey
if (cControl != null)
{
if (cControl.ClientID.Contains(FieldKey))
{
MatchControls.Add(cControl);
}
}
}
}
catch (Exception ex)
{
g_Error = ex.ToString();
}
return MatchControls;
}