1

現在、ascxコントロール内にドロップダウンがあります。同じページにある別のascxのコードビハインドからそれを「見つける」必要があります。その値は、ascx#2のObjectDataSourceへのパラメーターとして使用されます。私は現在、この醜いコードを使用しています。それは機能しますが、制御順序が変更されたり、その他のさまざまなことが行われたりすると、私が期待している場所ではないことに気付きます。誰かが私がこれを適切に行うべき方法について何かアドバイスがありますか?

if(Page is ClaimBase)
{
  var p = Page as ClaimBase;
  var controls = p.Controls[0].Controls[3].Controls[2].Controls[7].Controls[0];
  var ddl = controls.FindControl("ddCovCert") as DropDownList;
}

ありがとう、明けましておめでとうございます!〜サンディエゴのck

4

2 に答える 2

6

必要な値を返すユーザーコントロールクラスのプロパティを公開します。ページにプロパティへのアクセスを許可します。

ユーザーコントロールのみが、その内部にあるコントロールを知っている必要があります。

于 2009-12-31T23:04:38.247 に答える
6

一般に、コントロールの検索がたくさんある場合は、「FindInPage」または再帰的なFindControl関数を実装します。この関数では、コントロールを渡すだけで、コントロールツリーを再帰的に下降します。

1回限りの場合は、APIで必要なコントロールを公開して、直接アクセスできるようにすることを検討してください。

public static Control DeepFindControl(Control c, string id)
{
   if (c.ID == id)
   { 
     return c;
   }
   if (c.HasControls)
   {
      Control temp;
      foreach (var subcontrol in c.Controls)
      {
          temp = DeepFindControl(subcontrol, id);
          if (temp != null)
          {
              return temp; 
          }
      }
   }
   return null;
}
于 2009-12-31T23:06:07.823 に答える