-1

各行の最初のセルに動的に作成されたボタンを使用して、データベースから動的にロードされたテーブルを表示しようとしています。各ボタンには、1つの「汎用」メソッドハンドラーでボタンを一意に識別するROW_ID値が割り当てられています。

私が理解できる限り、これを行う唯一の方法は、データをロードして表示し、Initライフサイクルフェーズ中にハンドラーにボタンを配線することです。私が直面している問題は、このボタンが(たとえば目的で)その特定の行のデータベースで削除(または他の変更)プロシージャを呼び出す場合、Response.Endを実行し、この変更を反映するためにページをリロードする必要がある場合です。 PostBackハンドラーの間、DBから新しいデータセットを再フェッチし、新しいボタンのセットを作成してハンドラーに接続するには、すでに遅すぎます。ただし、ページ全体をリロードすると、すべてのコントロールの状態が失われます。これは望ましくありません。

注意すべき点の1つ:データベースからの結果セットを表示するためにカスタムレンダリングユーザーコントロールを使用しています(ただし、テーブルのように見えます)。DataBindingでDataGridViewを使用していません。

考えられる解決策は、各行にラジオボタンを使用し、下部に1つの静的ボタンを使用することですが、これは理想からはほど遠いものです。

質問は次のとおりです。これを行うためのより良い方法は何ですか?私は何かが足りないのですか?ASP.NETがこの一般的なユースケースを処理するのにこれほど面倒だとは信じがたいです。

可能な提案をありがとう。

4

1 に答える 1

0

私が最終的に得た解決策は、各行のダミーボタンでJavaScriptベースの__doPostBack('static_button_id'、'row_id')を使用することです。このポストバックが発生した行を識別する引数を持つポストバックを生成します。

ボタン(ID = static_button_id)は、style = "display:none;"を介してページに非表示になっている派生クラシックボタンです。クリックすると、カスタムハンドラーが呼び出されます(初期化/ロードフェーズ中に割り当てられます)。引数のポストバック検証を回避するために派生しました。

.NETハンドラー内のパラメーター(row_id)を取得するには、次を使用します。string PassedArgument = Request.Params.Get( "__ EVENTARGUMENT");

それは私が必要としていることを正確に実行しますが、やや汚れています。誰かがこれを行うためのクリーンな方法を提供してくれれば、私はまだ感謝します。

ありがとう。

于 2012-09-12T10:25:02.497 に答える