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