マスターから作成されたページのコンテンツエリアにあるWebユーザーコントロール内で、動的に生成されたテーブルセル内のRequiredFieldValidatorとRegularExpressionValidatorを動的に作成されたテキストボックスに追加する必要があります。ダイナミックコントロールのバリデーションナイトメアーC#
おそらく推測できるように、問題は動的に作成されたテキストボックスを見るためにControlToValidateプロパティを動的に設定しようとしています。
- パネルを作成します(私が聞いてきたようにControlToValidateとValidatorは同じコンテナ内になければならない):いくつかの研究の後、今のコードは
。これはもともとはプレースホルダでしたが、下記の提案を試していました。
- テキストボックスを作成し、そのIDを設定します。
- テキストボックスをパネルに追加します。
- RequiredFieldValidatorを作成します。
ControlToValidateのIDを設定します。私が使用することを試みている値:
- 制御
- 制御
- サーバーがWebユーザーコントロールの子コントロールに追加追加したテキストで始まるコントロールのIDのクライアントIDのID
- クライアントIDは同じよう
- (オフのチャンスに)コントロールの名前サーバがコントロール の名前に追加したテキストで始まる制御の
- 名を変更しました
上記で詳述したように接頭辞で修飾された制御
- の一意ID
- をテキストボックスに新しい制御オブジェクトをキャストする試みに特注再帰的にFindControl方法を使用し、そのIDを使用してクライアントID 同じ
- バリデーターをパネルに追加します。
- パネルをテーブルセルに追加します。
言うまでもなく、私はまだそれを検証することになっているコントロールを「見る」ためにバリデータを説得することができませんし、私が問題にアプローチする新しい方法のうち、完全だと言っています。
EDIT:page_loadイベントが終了するまで、さらに探偵的な仕事があっても、ページに問題はありません。ページを構築するコードの実行が終了した後、サーバーに問題があるようです。あまりにも早すぎるのではなく、あまりにも遅すぎると、実際にコントロールを名前付きコンテナに追加しているのかどうか疑問に思っています。
提案がありますか?
PreInit()イベント中に動的コントロールが追加されていますか? –
いいえ、そうではありません。どうして? –
ちょうど私の2セント..ダイナミックに作成されたすべてのコントロールは、ポストバックで失われます。列挙を介していくつかのフィールドとボタンを動的に作成することができます。ボタンが存在し、クリックイベントを実行できるようにするには、 – foxtrotZulu