ASP.NET ページのフォームにテキスト ボックス (一定数のテキスト ボックスではない) を動的に追加していますが、これらのテキスト ボックスからデータを読み取るにはどうすればよいですか?
8 に答える
ポストバックでコントロールにアクセスしたい場合、最初のロードで作成されたときとまったく同じように動的コントロールを再作成し、ページの FindControls メソッドを使用してコントロールを見つけます。Textbox1、Textbox2 などの ID を使用してテキスト ボックスを作成すると、おそらく役立つでしょう。
Request.Params を見て、そこから抽出します。もちろん、それらを区別できるように ID を与える必要があります。
それらを追加するときは、それらに名前/IDを与える必要があり、それらを使用してそれらを参照できます。
そうでない場合は、JavaScript で DOM をたどって、作成したフォーム内でそれらを見つけます。それらは、挿入したのと同じ順序になります。
最後に、それらはすべてページへの投稿/取得入力として使用できるため、別の名前を割り当てている限り、すべてを表示できるはずです。
-アダム
私が使用したすべての ASP.NET アプリから、.NET はサーバー コントロールの Id を生成するときに次のアルゴリズムを使用するのが好きです。
ctl00$cphBody$[ControlID]
動的に生成されたテキスト ボックスからデータにアクセスする場合は、このアルゴリズムを使用してみてください。
ASP.Net では、すべてのポストバックがクラスの新しいインスタンスであることを思い出してください。以前のポストバック中または最初のビューでこれらのコントロールを作成した場合、それらは以前のインスタンスの残りの部分でガベージ コレクションされました。したがって、この新しいインスタンスでコントロールを使用するには、もう一度作成する必要があります。これらのコントロールの状態情報 (ユーザーが入力した値を含む) を読み込む必要がある場合は、viewstate が読み込まれる前に作成する必要があります。つまり、load イベントではなく、Init イベント中に作成する必要があります。
テキストボックスを動的に作成する場合 (おそらく JavaScript を使用しますが、ASP.NET コントロールも同様です)、特定のパターンで名前を付けます。後で認識できるもの。
サーバー側では、Page_Init の後に発生するイベント ハンドラーで、 Request.Formコレクションを反復処理できます。
アプリケーションにクロスサイト リクエスト フォージェリを適用するために使用できるため、Request.Param を使用する誘惑に駆られないでください (攻撃者は、アプリケーションが POST を解釈するのと同じように解釈する GET 要求を発行するようにユーザーを誘導する可能性があります。これは通常、良いことではありません)。
動的 ASP.NET コントロールを (たとえば Page_Render で) 追加する場合は、コントロールを再構築してそのプロパティを使用することもできます。
FindControl を使用してテキストボックス ID を渡すと、ポストバック時にテキストボックスのインスタンスを取得できます。ページ読み込み段階またはサイクルの後半にある場合、Text プロパティにはデータが含まれます。動的コントロールを追加するときは、CreateChildControls メソッドをオーバーライドし、サイクルのこの段階で動的コントロールをコントロール階層に追加します。
動的コントロールを作成するには、通常、ASP.NET PlaceHolder コントロールを使用して、動的コントロールをこのコンテナーに追加します。
各動的コントロールに ID を付与します。
その後、PlaceHolder で FindControl を使用して動的コントロールにアクセスできます。
「動的コントロール」とは、実行時に追加するコントロールを意味します