ポストバック先で前のページのコントロールにアクセスする
さて、ポストバック先を別のページにすることはできましたが、ポストバック先で、 ポストバック元のコントロールのプロパティを取得したい場合はどうすればいいんでしょうか。
さきほどの10行でずばり!のページではFindControlメソッドを利用しています。大抵の場合はこれでいけるのですが、 マスターページを利用したページでは、子コントロールの階層が複雑になり、 単純なFindControlでは対象のコントロールを見つけることができません。
そこでこんな関数で探してやりましょう。単純に再帰してコントロールを探しているいるだけです。
private Control FindControl(Control ctl, string id)
{
Control resultCtl = ctl.FindControl(id);
if (resultCtl != null)
return resultCtl;
else
{
for (int i = 0; i<ctl.Controls.Count; i++)
{
resultCtl = FindControl(ctl.Controls[i], id);
if (resultCtl != null)
return resultCtl;
}
}
return null;
}