0

Web ページにプレースホルダーがあり、ユーザー コントロールをそれに動的にバインドします。

プレースホルダー内のすべてのコントロールをループして、ユーザー コントロールの ID であるコントロール ID を取得しようとしました。コントロール ID は基本的に、アンダースコアを含むユーザー コントロールの名前です。したがって、ユーザー コントロールの名前が dynamicControl.ascx の場合、control.ID で ASP.dynamicControl_ascx を取得します。ユーザー コントロールを再度読み込む必要がありますか? もしそうなら、どうすればそれを行うことができますか、どのようにタイプキャストしますか、また、ユーザーコントロール内でグリッドビューを見つけるにはどうすればよいですか?

ユーザー コントロールは gridview であり、コントロール内のテキスト ボックスに入力された値を取得する必要があります。

4

2 に答える 2

2

ここで必要ないくつかの手順/概念...

  1. ページのライフ サイクルを理解し、動的コンポーネントをバインドする場所とタイミングを把握します。通常、これは Page_Init 内でバインドを実行して、ポストバック ビューステート バインディングに存在するようにすることで実現できます。この考慮がなければ、グリッドが存在しない可能性があり、存在する場合でもほとんどの場合空になります。バインディングを Page_Init に移動するだけでは不可能な場合があります...これらの場合、Biding Dynamic Controls でグーグルする必要があります。ポストバックで返される動的コンテンツを取得するためのさまざまなアプローチに対処する方法については、例がたくさんあります。

  2. 子コントロール リストを調べる必要はありません。FindControl を調べてください。作成時にグリッドに 'MyGrid' の ID が割り当てられ、ユーザー コントロールの名前が MyUserControl であると仮定します... ポストバックでグリッドを見つけるには (上記のビューステートの問題が処理されると仮定します) - 簡単に使用できます: grid = MyUserControl.FindControl("MyGrid")

もちろん、グリッド オブジェクトが返されない場合、MyGrid は存在しません。

お役に立てれば.....

于 2012-04-21T10:14:21.260 に答える
1

これはあなたに役立ちます http://www.asp.net/web-forms/tutorials/master-pages/control-id-naming-in-content-pages-cs

このようにして、動的に追加されるコントロール値を見つけることができました。見つけたいコントロールIDを提供するだけです。ここで、私のパネル ID はplnall、テキストボックス ID はtxt_idcplacehldはコンテンツ プレースホルダー ID、ctl00 はマスターページ ID です。

MasterPage ctl00 = FindControl("ctl00") as MasterPage;

            ContentPlaceHolder cplacehld = ctl00.FindControl("ContentPlaceHolder2") as ContentPlaceHolder;
 Panel panel1 = cplacehld.FindControl("plnall") as Panel;
 TextBox txt = cplacehld.FindControl("txt_id") as TextBox;
                    value = txt.Text;
于 2012-04-21T10:50:30.053 に答える