2011-06-27 14 views
1

これは私の問題の非常に明確な説明ではありませんが、それをよりうまく説明する方法はわかりません。動的グリッドビューローのnamingContainer ID

私はPreInitで動的に作成するgridviewを持っています。このグリッドビューには、各行に動的にテキストボックスが追加されています。

私はボタンを押すたびに、グリッドビューのセルをループし、テキストボックスのテキストを取得し、データベースを更新します。

GridViewコントロールが作成されて初めて、行のUniqueIDのは、このようなものです: ctl03、ctl04、ctl05、ctl06(したがって、テキストボックスのID年代であるctl03 $ txt0等。)

初めて私がプッシュしますボタンをクリックすると、UniqueIDの行が同じであるため、FindControl(ID)メソッドでコントロールを見つけたり、Request.Form [txt.UniqueID]を使ってコントロールを見つけることができます。

ただし、最初に、ボタンを押すたびに、ClientIdの行がctl02、ctl03、ctl04、ctl05のように作成されます。テキストボックスを見つけることができず、テキストボックスに書き込まれたテキストをキャッチできません。私は、レンダリングされたHTMLコードを見ると、私はrowClientID年代は、まだ最初の作成したもの(ctl03、ctl04、ctl05、ctl06)と同じであることがわかり

誰でものROWIDは(命名理由を任意のアイデアを持っていますコンテナID)は最初の更新後に変更されますか?

ありがとうございます。

答えて

0

解決策の1つは、静的idでテキストボックスを作成し、asp.netで動的に作成されないようにすることです。 4.

他のソリューションは、単純な<input name="KnowName01" id="KnowId01" type="text" value="your value here" maxlength="100" etc... >

をレンダリングすることで、その後のポストに戻ってあなただけの古い方法でリターンをキャプチャして、値を取得するのverあなたがasp.netを使用する場合、これは行うことができます。終わり

Request.Form["KnowName01"] 

、テキストボックスには、入力、プラスアンチXSSの安全を含め、その上に書かれたもののためにいくつかのチェック、のレンダリング以外の何ものでもありません。

+0

私が間違っていても、私たちがRequest.Formをキーとして送信しているUniqueIDではない場合は、私を修正してください。私はIDをテキストボックス(txt0と言う)に割り当てますが、レンダリング時にasp.netはプレフィックスを付けて、最初のIDを 'ctl00 $ CntntPlcHld $ ctl02 $ txt0'にします。ここで問題が発生します。最初のrowID = ctl03を取得しますが、2番目または3番目の更新ボタンを押すと、rowIDはctl02になります。興味深いのは、まだHTMLコードのctl03だということです。コードビハインドとHTMLレンダリングされたコードの2つのrowIDが一致しないので、私はテキストボックスのUniqueIDが間違っていて、その上のTextをキャッチできません。 – louip

+0

@louipはいuniqueidはフォーム上のもので、これはレンダリングされたタグの名前です。 – Aristos

関連する問題